我想知道它们是否是同一件事,因为有些程序员说“作用域”,而其他人则说“执行上下文”。
我想知道它们是否是同一件事,因为有些程序员说“作用域”,而其他人则说“执行上下文”。
一般来说,“变量作用域”这个术语被用作词法环境组件的同义词。因此,严格地说,是有区别的。然而,在实践中,术语的使用方式千差万别,并不一定与规范相符。
更详细的回答:请参阅 ECMA-262 规范!
当控制权转移到 ECMAScript 可执行代码时,就进入了一个 执行上下文。活动的执行上下文逻辑上形成一个栈。该逻辑栈上的顶部执行上下文是正在运行的执行上下文。每当从当前正在运行的执行上下文关联的可执行代码转移到不与该执行上下文关联的可执行代码时,都会创建一个新的执行上下文。新创建的执行上下文被推入堆栈并成为正在运行的执行上下文。
执行上下文包含跟踪其关联代码执行进度所需的任何状态。
...
执行上下文的 LexicalEnvironment 和 VariableEnvironment 组件始终是词法环境。创建执行上下文时,它的 LexicalEnvironment 和 VariableEnvironment 组件最初具有相同的值。VariableEnvironment 组件的值永远不会改变,而 LexicalEnvironment 组件的值可能会在执行执行上下文内部的代码期间更改。
在大多数情况下,只有运行中的执行上下文(堆栈顶部)才会直接受到本规范算法的操作。因此,当使用“LexicalEnvironment”、“VariableEnvironment”和“ThisBinding”这些术语而没有限定词时,它们是指正在运行的执行上下文的这些组件。
...
标识符解析是使用运行时执行上下文的 LexicalEnvironment 确定 标识符 的绑定过程。在执行 ECMAScript 代码期间,将使用以下算法来评估语法产生式 PrimaryExpression : Identifier:
true
,否则让 strict 为 false
。评估标识符的结果始终是类型为“引用”的值,其引用名称组件等于 Identifier 字符串。
LexicalEnvironment
和 VariableEnvironment
有什么区别?前者只是指“作用域”吗? - doubleOrtLexicalEnvironment
的假设是正确的,那么我认为执行上下文是指任何具有独立作用域和自己的this
绑定的东西。 - doubleOrt通常 "scope" 指的是某些东西 - 例如变量 - 存在或以某种方式有效的区间。
"上下文"有时指的是一组对象,这些对象可以作为框架的一部分被访问到。这是框架规范的一部分。这就是 Matt 提供的内容。但有时它的意思类似于 "作用域"。"在当前函数的作用域内" 的意思与 "在当前函数的上下文中" 的意思几乎相同。
通常您可以从上下文中判断出上下文的哪个含义是正确的。
我不是 Javascript 专家!