JavaScript 作用域链

  • 函数的作用域再函数定义时就已经决定了,这是因为函数有一个内部属性[[scope]],当函数创建时,就会保存其所有父变量对象到其中,可以理解为[[scope]]就是所有父变量对象的层级链,但是注意:[[scope]]并不代表完整的作用域链。
//例子
function foo() {
  function bar(){
  }
}

| 创建函数时各自的[[scope]]为:

foo.[[scope]] = [
  globalContext.VO;
];
bar.[[scope]] = [
  fooContext.AO;
  globalContext.VO;
];
  • 由此可见 函数作用域是由[[scope]]组成的链式结构
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容