只是想知道它们是否是同一个东西,因为一些程序员说“范围”,而其他人说“执行上下文”。
答案 0 :(得分:5)
简短回答:执行上下文由规范定义,包含3个组件:
通常,术语“变量范围”用作LexicalEnvironment组件的同义词。因此,从技术上讲,是的,存在差异。然而,在实践中,术语使用情况变化很大,并不一定与规范一致。
更长的回答:To the ECMA-262-Spec-cave!
10.3执行上下文
当控件转移到ECMAScript可执行代码时,控件正在进入执行上下文。活性 执行上下文在逻辑上形成一个堆栈。此逻辑堆栈上的最高执行上下文是运行 执行上下文。每当从可执行文件传输控件时,都会创建一个新的执行上下文 与当前运行的执行上下文相关联的代码,该可执行代码与该执行上下文无关。新创建的执行上下文被压入堆栈并成为 运行执行上下文。
执行上下文包含跟踪其关联执行进度所需的任何状态 代码。
...
执行上下文的LexicalEnvironment和VariableEnvironment组件始终是Lexical 环境。当执行上下文创建其LexicalEnvironment和VariableEnvironment时 组件最初具有相同的值。 VariableEnvironment组件的值永远不会更改 而在执行代码时,LexicalEnvironment组件的值可能会发生变化 执行上下文。
在大多数情况下,只有正在运行的执行上下文(执行上下文堆栈的顶部)才是直接的 由本规范中的算法操纵。因此当术语“LexicalEnvironment”时, “VariableEnvironment”和“ThisBinding”在没有限定的情况下使用,它们参考了那些 正在运行的执行上下文的组件。
...
10.3.1标识符解析
标识符解析是使用LexicalEnvironment确定标识符的绑定的过程。 正在运行的执行上下文在执行ECMAScript代码期间,语法生成 使用以下算法评估 PrimaryExpression :标识符:
- 让 env 成为正在运行的执行上下文的LexicalEnvironment。
- 如果正在评估的语法生成包含在严格模式代码中,那么让 strict 为
true
, 否则让严格成为false
。- 返回调用GetIdentifierReference函数的结果,将 env , Identifier 和 strict 作为参数传递。
醇>评估标识符的结果始终是Reference类型的值及其引用的名称组件 等于标识符字符串。
答案 1 :(得分:0)
一般来说,“scope”指的是某种东西 - 例如变量 - 存在或以某种方式有效的区间。
“Context”有时指的是当前使用特定框架操作的对象可访问的对象集 - 作为该框架规范的一部分。这就是马特所提供的。但有时它意味着“范围”。 “在当前函数的范围内”与“在当前函数的上下文中”几乎相同。
您通常可以从...上下文中了解上下文的含义。
我不是Javascript专家!