【发布时间】:2020-04-17 14:58:35
【问题描述】:
据我了解,每次 JavaScript 程序开始运行时,引擎首先创建一个执行上下文,将该执行上下文推送到调用堆栈/执行堆栈中,然后创建一个全局对象(浏览器中的窗口和全局在 Node 中)也是如此。
为了创建执行上下文,引擎首先经过创建阶段,在此阶段它为整个函数定义和变量声明(提升)分配内存空间。它维护对外部作用域的引用(这会创建作用域链,但在全局执行上下文中,它上面没有任何东西),它还在执行上下文中创建this 属性并将其设置为窗口对象在浏览器和 Node.js 中的 module.exports 中。最后,引擎进入执行阶段,逐行执行代码并为每个变量赋值。
我将全局执行上下文的创建与全局对象本身的创建区分开来是否正确?我将它们视为并行发生但并不完全相同的操作。
【问题讨论】:
标签: javascript scope v8