Javascript:作用域链是什么时候创建的



我听到两种说法:

定义函数时:

  • Professional Javascript for Web Developers, 3rd Edition一书中,在Chapter 7: Function Expressions闭包部分:

定义compare()时,其作用域链为创建,预加载全局变量对象,并保存到内部[[Scope]]属性。当调用函数时,将创建一个执行上下文,并通过复制函数的[[Scope]]属性中的对象。

据说作用域链是在定义函数id时创建的

当函数被调用时:

  • 在本文中:什么是执行上下文&用JavaScript堆叠?:

所以我们现在知道,每次调用函数时,都会创建一个新的执行上下文。然而,在JavaScript解释器中,对执行上下文的每次调用都有两个阶段:

  • 创建阶段[当函数被调用时,但在它执行内部任何代码之前]:
    • 创建变量、函数和参数
    • 创建作用域链
    • 确定";这个">
  • 激活/代码执行阶段:
    • 分配值、对函数的引用以及解释/执行代码

据说作用域链是在调用函数时创建的。

那么哪一个是对的呢?

函数有一个内部[[Scope]]属性,该属性设置为函数在中定义的范围,当函数定义时设置为

然后,该作用域与执行函数时创建的新作用域一起成为作用域链的一部分。

最新更新