Javascript ES6中的块和执行环境

Javascript ES6中的块和执行环境,javascript,ecmascript-6,Javascript,Ecmascript 6,在ES6中,每个块都与一个词典环境相关联,以支持该语言版本的块范围功能 这是否意味着在ES6中,为每个块实例化一个新的ExecutionContext 参考: 例如(我在这里故意使用作用域为var的函数): 规范的相关位:否,每个函数只有一个执行环境: 让oldEnv成为正在运行的执行上下文的词典环境 让blockEnv成为NewDeclarativeEnvironment(oldEnv)。 执行BlockDeclarationInstallation(语句列表,blockEnv) 将正在运行的

在ES6中,每个块都与一个
词典环境
相关联,以支持该语言版本的块范围功能

这是否意味着在ES6中,为每个块实例化一个新的
ExecutionContext

参考:

例如(我在这里故意使用作用域为
var
的函数):


规范的相关位:

否,每个函数只有一个执行环境:

  • 让oldEnv成为正在运行的执行上下文的词典环境
  • 让blockEnv成为NewDeclarativeEnvironment(oldEnv)。 执行BlockDeclarationInstallation(语句列表,blockEnv)
  • 将正在运行的执行上下文的词典环境设置为blockEnv
  • 让blockValue作为对语句列表求值的结果
  • 将正在运行的执行上下文的词典环境设置为oldEnv
  • 返回blockValue

  • 否,每个函数只有一个执行环境:

  • 让oldEnv成为正在运行的执行上下文的词典环境
  • 让blockEnv成为NewDeclarativeEnvironment(oldEnv)。 执行BlockDeclarationInstallation(语句列表,blockEnv)
  • 将正在运行的执行上下文的词典环境设置为blockEnv
  • 让blockValue作为对语句列表求值的结果
  • 将正在运行的执行上下文的词典环境设置为oldEnv
  • 返回blockValue

  • 否,每个函数只有一个执行环境:

  • 让oldEnv成为正在运行的执行上下文的词典环境
  • 让blockEnv成为NewDeclarativeEnvironment(oldEnv)。 执行BlockDeclarationInstallation(语句列表,blockEnv)
  • 将正在运行的执行上下文的词典环境设置为blockEnv
  • 让blockValue作为对语句列表求值的结果
  • 将正在运行的执行上下文的词典环境设置为oldEnv
  • 返回blockValue

  • 否,每个函数只有一个执行环境:

  • 让oldEnv成为正在运行的执行上下文的词典环境
  • 让blockEnv成为NewDeclarativeEnvironment(oldEnv)。 执行BlockDeclarationInstallation(语句列表,blockEnv)
  • 将正在运行的执行上下文的词典环境设置为blockEnv
  • 让blockValue作为对语句列表求值的结果
  • 将正在运行的执行上下文的词典环境设置为oldEnv
  • 返回blockValue
  • 这是否意味着在ES6中,会为其实例化一个新的ExecutionContext 每个街区

    不,我认为情况并非如此

    根据我对规范的阅读,在块执行期间,当前
    ExecutionContext
    LexicalEnvironment
    被为块实例化的
    LexicalEnvironment
    临时替换。在控件离开块之前,将还原
    词典环境

    这是否意味着在ES6中,会为其实例化一个新的ExecutionContext 每个街区

    不,我认为情况并非如此

    根据我对规范的阅读,在块执行期间,当前
    ExecutionContext
    LexicalEnvironment
    被为块实例化的
    LexicalEnvironment
    临时替换。在控件离开块之前,将还原
    词典环境

    这是否意味着在ES6中,会为其实例化一个新的ExecutionContext 每个街区

    不,我认为情况并非如此

    根据我对规范的阅读,在块执行期间,当前
    ExecutionContext
    LexicalEnvironment
    被为块实例化的
    LexicalEnvironment
    临时替换。在控件离开块之前,将还原
    词典环境

    这是否意味着在ES6中,会为其实例化一个新的ExecutionContext 每个街区

    不,我认为情况并非如此

    根据我对规范的阅读,在块执行期间,当前
    ExecutionContext
    LexicalEnvironment
    被为块实例化的
    LexicalEnvironment
    临时替换。在控件离开块之前,将还原
    词典环境

    function foo() {
    
      {
        var foo; // Has a new ExecutionContext been instantiated here? 
      }
    
    }