我只是想弄清楚执行上下文工作流程的简单解释。
- 代码
var a=10;
function sample(){
var y = 10;
};
--
- Javascript 引擎启动。
- 创建全局执行上下文。
- 创建词汇和变量环境对象。
- 此属性已创建。指向全局对象。
环境对象(词法和变量)具有环境记录和
外部属性。任何人都可以通过解释
在这种情况下环境对象的差异来提供帮助。创建阶段扫描代码变量被提升为全局上下文。
- 环境对象内的环境记录(词法或变量??)保留变量定义。
它扫描函数代码并找到示例函数。当它找到一个函数时会发生什么?现在是否设置了 [[scope]] 属性?如果有人可以清楚地解释 [[scope]] 属性,那就太好了
全局执行上下文的执行阶段开始。
- 到达函数示例。
- 创建示例函数上下文。
- 与上述类似的步骤发生在创建阶段。
- 创建一个执行上下文(
- 创建了词法和变量环境)
- 词法环境有一个环境记录和
指向全局词法环境的外部环境。 - 变量环境也是用类似的属性创建的。
- 变量被提升。
- 现在 [[scope]] 属性发生任何变化?
- 执行进入执行阶段。等等。
请注意:我有点理解当可能存在函数表达式或 try catch 子句等时解释和行为会发生变化。已阅读变量环境在这种情况下发挥作用。我只是在寻找上述功能的工作流程。甚至函数的参数也会创建一个参数属性。这也可以忽略。只是基于上面的示例代码对词法变量环境和 [[scope]] 属性的一个非常简单的解释。还有一个这个属性。在这种情况下,它只是全局对象 - 我相信两种上下文的窗口。让我们也忽略它以保持简单:)。在理解这可能是我将为此创建一个单独的问题:)。
希望有人可以帮助我理解这个基本概念。寻找基于 ES5 的解释。提前谢谢你的帮助。
米娅