作用域链

35 阅读1分钟
  • js有两种对象:上文成员(js语法可以直接访问的成员)和下文成员((1)底层语法访问的成员  如[[scopes]])

    函数在声明的时候就会在[[scopes]] 里面保存了上层作用域的AO对象(Activation 0bject),函数本身不会生成AO对象

  function fn() {
    
  }
  console.dir(fn)
  fn()

image.png 这里的fn在全局中声明,所以上层作用域对象为GO对象(Globe Object)

  • 1. 在函数被调用时才会生成本层作用域的AO对象保存在[[scopes]]。按本层AO对象拜访成员,逐级向上寻找需要的数据。
  function fn() {
    function fn1() {
      function fn2() {

      }
    }
  }

image.png 函数在每次调用都会产生新的AO对象,在代码执行完毕之后就会销毁 下面这个图也是作用域链的示意图

image.png