Javascript:作用域链何时创建?

时间:2014-01-15 03:17:51

标签: javascript function scope

我听到两种说法:

定义函数时:

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

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

据说范围链是在定义了函数id 时创建的。

调用函数时:

  

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

  • Creation Stage [调用函数时,但在执行任何代码之前]:
    • 创建变量,函数和参数。
    • 创建范围链
    • 确定“this”的值。
  • 激活/代码执行阶段:
    • 分配值,引用函数和解释/执行代码。

表示范围链是在调用函数时创建的

哪个是对的?

1 个答案:

答案 0 :(得分:0)

函数具有内部[[Scope]]属性,该属性设置为定义函数的范围,定义时

然后,该范围是范围链的一部分,以及执行该函数时创建的新范围。