日常遇到的一些問題或知識的筆記(二)

南風一濺發表於2019-01-09

作用域鏈

在建立一個函式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]]屬性

相關文章