我听到过两种说法:
当定义函数时:
- In book
Professional Javascript for Web Developers, 3rd Edition
, 在里面Chapter 7: Function Expressions
封闭部件:
当compare()被定义时,它的作用域链是
已创建,预加载全局变量对象,并保存到内部 [[Scope]] 属性。
当函数被调用时,会创建一个执行上下文,并通过以下方式构建其作用域链
复制函数的 [[Scope]] 属性中的对象。
据说作用域链是在函数 id 定义时创建的.
当函数被调用时:
- 在本文中:JavaScript 中的执行上下文和堆栈是什么? http://davidshariff.com/blog/what-is-the-execution-context-in-javascript/:
所以我们现在知道每次调用函数时都会创建一个新的执行上下文。然而,在 JavaScript 解释器内部,对执行上下文的每次调用都有两个阶段:
- Creation Stage [when the function is called, but before it executes any code inside]:
- 创建变量、函数和参数。
-
创建范围链.
- 确定“this”的值。
- Activation / Code Execution Stage:
据说作用域链是在调用函数时创建的.
那么哪个是正确的呢?
函数有一个内部 [[Scope]] 属性,该属性设置为定义函数的范围,当它被定义时.
该作用域与执行函数时创建的新作用域一起成为作用域链的一部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)