做用域-做用域鏈

[[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

查找變量遵循從做用域鏈的頂端依次向下查找的原則。因此在所在的做用域鏈查找不了該變量會報錯。作用域

相關文章
相關標籤/搜索