for for循环隐式创建一个块?

Ran*_*lue 8 javascript ecmascript-6

我正在使用letNode.JS(需要标志--harmony--use-strict).据我了解,该let语句允许块作用域声明.考虑以下:

let a;
for(let i = 0; i < 3; i += 1) {
  console.log(i);
}
Run Code Online (Sandbox Code Playgroud)

涉及多少块范围?在哪个块范围内i?我是否正确地认为,为了使这个示例起作用,涉及三个块作用域,其中一个作用域由for循环隐式创建,如下所示?

{ // block #1
  let a;
  { // block #2 (contains `i`)
    let i;
    for(i = 0; i < 3; i += 1) { // block #3
      console.log(i);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ski 6

根据最新的(2013年5月14日)ES6草案:是的.

您可以在第12.6.3节中找到以下内容,其中声明当语句包含LexicalDeclaration(或)时,会创建其他环境(范围):forletconst

IterationStatement:for(LexicalDeclarationNoIn ; Expression opt ; Expression opt)Statement

  1. oldEnv成为正在运行的执行上下文的LexicalEnvironment.
  2. loopEnv是调用NewDeclarativeEnvironment传递oldEnv作为参数的结果.
  3. ...

但请记住,它仍然可能会发生变化.