作用域鏈
在建立一個函式compare()時,會建立一個預先包含全域性變數物件的作用域鏈,這個作用域鏈被儲存在函式內部的[[Scope]]屬性中。當呼叫compare()函式時,會為函式建立一個執行環境,並在compare()函式內部的[[Scope]]屬性上加入一個活動物件,該活動物件包含函式作用域內的變數。
簡而言之,作用域鏈即函式的[[Scope]]屬性,該屬性包含一個全域性物件和一個活動物件
舉個例子:
function compare(x, y) {
if (x > y) {
return 1
} else if (x < y ) {
return -1
} else {
return 0
}
var z = 3;
}
var res = compare(1, 2)
複製程式碼
compare()函式執行時,會形成一條作用域鏈([[Scope]]屬性),如下圖:
該作用域鏈包含兩個物件
全域性物件:compare()函式能訪問到的所有全域性變數,如res、window、document。假如引入了jquery,還包含$物件
活動物件:compare()函式執行時其作用域內的所有變數,比如x、y、z。
可以通過chrome開發者工具檢視[[Scope]]屬性