8

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

let a;
for(let i = 0; i < 3; i += 1) {
  console.log(i);
}

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

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

1 回答 1

6

基于最新(2013 年 5 月 14 日)的 ES6 草案:是的。

您可以在第 12.6.3 节下找到以下内容,其中指出当语句包含LexicalDeclaration(或)时会创建一个附加环境(范围):forletconst

IterationStatement : for ( LexicalDeclarationNoIn ; Expression opt ; Expression opt )语句

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

但请记住,它仍有可能发生变化。

于 2013-06-27T21:05:58.583 回答