做用域-做用域链

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

查找变量遵循从做用域链的顶端依次向下查找的原则。因此在所在的做用域链查找不了该变量会报错。作用域

相关文章
相关标签/搜索