[[scope]]:每一個JavaScript函數都是一個對象,對象中有些屬性咱們能夠訪問,但有些不能夠,這些屬性僅供JavaScript引擎存取,[[scope]]就是其中一個。javascript
[[scope]]指的是咱們常說的做用域,其中存儲了運行期上下文的集合。java
做用域鏈:[[scope]]中所儲存的執行期上下文對象的集合,這個集合呈鏈式連接,咱們叫它爲做用域鏈。函數
function a() { var aa = 1 console.log(aa) console.log(bb) //報錯 function b() { var bb = 2 console.log(aa, bb) console.log(cc) //報錯 function c() { var cc = 3 console.log(aa, bb, cc) //正常 } c() } b() } a()
a函數[[scope]]執行期上下文對象的鏈式集合:變量aa,b函數->全局環境。code
b函數[[scope]]執行期上下文對象的鏈式集合:b函數,變量bb,c函數->變量aa,a函數->全局環境。對象
c函數[[scope]]執行期上下文對象的鏈式集合:變量cc->b函數,變量bb,c函數->變量aa,a函數->全局環境。ip
查找變量遵循從做用域鏈的頂端依次向下查找的原則。因此在所在的做用域鏈查找不了該變量會報錯。作用域