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

时间:2013-06-27 20:51:14

标签: javascript ecmascript-6

我在Node.JS中玩let(需要标记--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);
    }
  }
}

1 个答案:

答案 0 :(得分:6)

基于最近的(2013年5月14日)draft of ES6:是。

您可以在第12.6.3节中找到以下内容,其中指出当for语句包含 LexicalDeclaration 时,会创建其他 Environment (范围) (letconst):

  

IterationStatement for LexicalDeclarationNoIn ; Expression opt ; 表达式 opt 声明

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

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