成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

前端百題斬——通俗易懂的變量對象

開發 前端
變量對象是一個與執行上下文相關的特殊對象,存儲著上下文中聲明的內容。按照執行上下文可劃分為全局上下文中的變量對象和函數上下文中的對象。

 [[402420]]

變量對象是一個與執行上下文相關的特殊對象,存儲著上下文中聲明的內容。按照執行上下文可劃分為全局上下文中的變量對象和函數上下文中的對象。

全局上下文中變量對象

全局對象在進入全局執行上下文之前就已經完成創建,該對象只有一份,其屬性可在程序任何位置訪問,其生命周期將在程序退出時終止。例如定義在全局的變量、Math、Date等都屬于全局上下文中的變量對象。

函數上下文中的變量對象

在函數執行上下文中的存在著與該執行上下文相關的內容:形參、函數聲明、變量,這就是函數中的變量對象。(下文將重點介紹函數中的變量對象)

在“百題斬——執行上下文”中講述了執行上下文分為創建階段和代碼執行階段,其中創建階段中會完成變量創建;在代碼執行階段會完成變量賦值。下面從這兩個階段介紹該過程。

  1. function test(x, y, z) { 
  2.     console.log(arguments); 
  3.     console.log(childFun()); 
  4.     console.log(val1); 
  5.     var val1 = 10; 
  6.     console.log(val1); 
  7.     function childFun() { 
  8.         return 'childFun'
  9.     } 
  10.     console.log(childFun()); 

11.1 創建階段

在變量對象的創建過程中,分別完成以下幾個步驟:

創建arguments對象

arguments 是一個對應于傳遞給函數的參數的類數組對象。在變量對象創建階段,首先檢查當前上下文中的參數,建立該對象下的屬性與屬性值。arguments的創建后的結果如下所示:

  1. [Arguments] { '0': x, '1': y, '2': z } 

檢查function函數聲明創建屬性

在變量對象中以函數名建立一個屬性,屬性值為指向該函數所在內存地址的引用。如果函數名的屬性已經存在,那么該屬性將會被新的引用所覆蓋。

檢查變量聲明創建屬性

對于var聲明的變量,每找到一個就在變量對象中以變量名建立一個屬性,屬性值為undefined。如果該變量名的屬性已經存在,為了防止同名的函數被修改為undefined,則會直接跳過,原屬性值不會被修改。對于let和const聲明的變量只會建立一個屬性但并沒有對齊進行賦值,所以不能進行使用。

11.2 執行階段

未進入執行階段之前,變量對象中的屬性都不能訪問,但是進入執行階段之后,變量對象(VO)轉變為了活動對象(AO),里面的屬性都能被訪問了,然后開始進行執行階段的操作。(變量對象和活動對象其實都是同一個對象,只是處于執行上下文的不同生命周期)

首先看一下整個代碼的執行結果

  1. function test1(x, y, z) { 
  2.     console.log(arguments); // [Arguments] { '0': 1, '1': 2, '2': 3 } 
  3.     console.log(childFun()); // childFun 
  4.     console.log(val1); // undefined 
  5.     var val1 = 10; 
  6.     console.log(val1); // 10 
  7.     function childFun() { 
  8.         return 'childFun'
  9.     } 
  10.     console.log(childFun()); // childFun 
  11.  
  12. test1(1, 2, 3); 
  1. 上面中的arguments接收到了傳入的參數,完成了對應屬性值的賦值過程,并驗證了arguments參數的結構;
  2. childFun函數在兩個位置均可以調用輸出正確的執行結果,證明在創建階段函數得到了提升并完成了對應的賦值;
  3. val1變量在初始化之前可以進行調用,則證明在其創建階段完成了變量提升,但是其值只被賦值為undefined,當執行到對應語句才正確賦值。

本文轉載自微信公眾號「執鳶者」,可以通過以下二維碼關注。轉載本文請聯系執鳶者公眾號。

 

責任編輯:武曉燕 來源: 執鳶者
相關推薦

2021-11-19 09:01:09

防抖節流前端

2021-05-27 07:02:05

JavaScript代碼設施

2011-10-26 19:57:33

2019-06-19 08:30:47

網絡協議IPTCP

2023-01-06 09:40:20

項目性能

2020-06-08 10:50:58

前端TypeScript代碼

2021-05-26 16:12:20

區塊鏈加密貨幣比特幣

2022-06-28 07:31:11

哨兵模式redis

2022-09-23 08:32:53

微服務架構服務

2021-05-12 07:04:55

Js變量方式

2021-05-19 07:02:42

JS對象方法

2021-11-04 08:16:50

MySQL SQL 語句數據庫

2022-07-06 08:17:50

C 語言函數選型

2021-10-19 22:23:05

typeof方式Instanceof

2021-05-09 22:00:59

TypeofInstanceof運算符

2019-05-20 07:37:00

TCPIP網絡協議

2018-01-17 22:36:46

區塊鏈數字貨幣比特幣

2021-05-25 09:50:01

GitLinux命令

2018-03-11 15:11:38

物聯網數據物聯網數據

2018-03-05 08:35:12

物聯網互聯網網絡技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品国产91久久久久久最新 | 国产日韩欧美中文 | 久久精品欧美视频 | www.99久久.com| 91精品一区二区三区久久久久 | 精品国产一区二区三区日日嗨 | 精品亚洲一区二区 | av黄色在线| 欧美一级精品片在线看 | 亚洲精品18 | 天天综合国产 | 免费观看一级毛片视频 | 99成人精品 | 一区二区三区在线 | 91xh98hx 在线 国产 | 欧美情趣视频 | 亚洲人一区 | 夜夜夜操 | 狠狠久久综合 | 在线免费观看成人 | 日韩精品在线看 | 国产精品久久国产愉拍 | 一区二区av| 成人av看片| 欧美一区二区三区大片 | 日韩看片| 三级黄色片在线播放 | 91性高湖久久久久久久久_久久99 | 国产99久久 | 一区中文 | 欧美aaaaa| 国产精品一级在线观看 | 四虎在线观看 | 在线资源视频 | 久久网日本| 亚洲国产精品一区 | 欧美成视频 | 亚洲国产一区二区视频 | 最近中文字幕第一页 | 欧美一级全黄 | 99日韩 |