JS作用域

修訂歷史
版本 日期 原因
V1.00 2018/08/1 創建文檔

目 錄
1.JavaScript 作用域 1

1 1.理解作用域
作用域相關概念:
引擎:
從頭到尾負責整個 JavaScript 程序的編譯及執行過程。
編譯器:
負責語法分析和代碼生成。
作用域:
負責收集和維護由所有聲明的標識符(變量)組成的一系列查詢,並實施一套規則,確定當前執行的代碼對這些標識符的訪問權限。

舉例
var a = 2

編譯器:

  1. 先編譯器會詢問作用域 是否已有一個該名稱的變量在於同一個作用域的集合中,有的話忽略當前聲明,繼續編譯;沒有的話會要求作用域在當前作用域的集合中聲明一個新的變量,命名爲a。
  2. 編譯器生成引擎運行時所需代碼。

引擎:
詢問作用域,是否存在叫做a的變量;
找到變量,將2賦值給它;找不到的話,拋出異常。

引擎的查找操作:
引擎執行編譯器生成的代碼時,會通過查找變量a來確定它是否已經被聲明。
查找分爲兩種:LHS和RHS。
RHS查詢:
與簡單的查找某個值別無二致(賦值操作的源頭);
LHS查詢:
試圖找到這個值的容器本身,從而可以對其賦值(賦值操作的目標);

1.2 小測驗
1.2.1 例子
function foo(a) {
var b = a;
return a + b;
}
var c = foo( 2 );

個人理解:
1) 對c進行LHS查詢,準備賦值。
2) 對foo(2)進行RHS查詢,獲得foo的值。
3) 隱形a = 2 賦值操作, 對a進行LHS查詢,並賦值2。
4) 對b進行LHS查詢,準備賦值。
5) 對a進行RHS查詢,獲得值2,並給b賦值。
6) return a + b, 對a和b進行RHS查詢,並給c賦值。

共計3次LHS查詢,4次RHS查詢

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章