执行上下文JavaScript的可变环境

圣安东尼奥

秒。10.3将执行上下文的组件描述如下:

执行上下文的LexicalEnvironment和VariableEnvironment组件始终是Lexical Environments。创建执行上下文时,其LexicalEnvironment和VariableEnvironment组件最初具有相同的值。VariableEnvironment组件的值永远不会更改,而LexicalEnvironment组件的值可能会在执行上下文中的代码执行期间更改。

好吧,让我们有代码片段:

{
    alert(o.prop);
    var o={prop: 'prop'};
}

我对以下代码段的理解:

当控制权转移到此代码段时,将创建相应的执行上下文并将其推送到堆栈。该上下文将成为运行中的执行上下文(称为cont)。cont创建期间VariableEnvironmentcont正在创建中。在之后cont的创作这段代码开始执行。

但正如第10.3节所述

VariableEnvironment组件的值永不变

因此,我们可以假设VariableEnvironment创建以后永不改变contIE的环境记录contVariableEnvironment包含所有具有约束力的创建VariableStatementFunctionDeclarartion初步。因此,我们可以通过引用将其应用于对象o但是我有TypeError: o is undefined

问题:为什么TypeError,上述原因引起的?我希望prop它将与警报消息一起显示,因为the value of the VariableEnvironment component never changes因此环境记录VariableEnvironment从不更改,因此该记录的所有绑定都是不可变的。

我可能不理解value of EnvironmentRecord正确的意思吗?

TJ人群

首先,您的代码只是定义一个block,而JavaScript没有block范围。环境记录与全局范围和功能相关,而不与块相关。

因此,我们假设它实际上是一个函数,因此它将创建一个新的作用域和环境记录:

function foo()
{
    alert(o.prop);
    var o={prop: 'prop'};
}

完全就像是这样对待:

function foo()
{
    var o;
    o = undefined;
    alert(o.prop);
    o={prop: 'prop'};
}

哪个应该澄清一点。:-)您试图取消引用,o就像它引用了一个对象一样,但是还没有(还);它的值是undefined

这是因为在完成任何分步工作之前var所有声明都会在进入执行上下文时进行处理,并且所有变量都将初始化为undefined(例如关联的任何初始化程序实际上都是一个赋值,并且稍后在逐步执行代码时到达该代码时发生。varvar o = ...

更多(在我的博客上)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

可变范围和javascript执行上下文

来自分类Dev

JavaScript中的执行上下文

来自分类Dev

执行上下文在JavaScript中

来自分类Dev

Javascript-上下文执行阶段

来自分类Dev

JavaScript执行上下文顺序

来自分类Dev

javascript 中的作用域、词法环境和执行上下文

来自分类Dev

Javascript中的执行上下文和执行上下文对象

来自分类Dev

执行上下文混乱

来自分类Dev

NodeJS执行上下文

来自分类Dev

通过html元素在JavaScript中传递执行上下文

来自分类Dev

JavaScript中的执行上下文和对象

来自分类Javascript

JavaScript中的“执行上下文”到底是什么?

来自分类Dev

Javascript调用堆栈/执行上下文参考

来自分类Dev

JavaScript 执行上下文和闭包

来自分类Dev

Go与JavaScript中方法的执行上下文

来自分类Dev

如何确定JavaScript回调函数的执行上下文?

来自分类Dev

Javascript 函数作用域和执行上下文

来自分类Dev

可变传递上下文

来自分类Dev

执行上下文和词法环境之间有什么区别和关系?

来自分类Dev

具有执行环境的Specs2 ForEach上下文

来自分类Dev

上下文已处理。执行异步

来自分类Dev

了解经典执行上下文示例

来自分类Javascript

npm:在上下文中执行?

来自分类Dev

[[作用域]]和执行上下文

来自分类Dev

执行上下文和return语句

来自分类Dev

程序的执行上下文是什么?

来自分类Dev

Web组件-什么是执行上下文?

来自分类Dev

Play的执行上下文与Scala Global

来自分类Dev

星号拨号计划:执行上下文