Javascript for循环计数器是否可以是ES2015中的常量声明?

Javascript for循环计数器是否可以是ES2015中的常量声明?,javascript,for-loop,ecmascript-6,Javascript,For Loop,Ecmascript 6,首先,let可用于循环计数器声明。这也是 由于使用了let,因此可以在块的内部更改i的值 for(let i = 0; i < 2; ++i) { setTimeout(function(){ document.write(i + "<br>"); }, 0); i = 123; // I want to block this assignment!! } 但是,此代码将赋值抛给常量变量。(在Chrome 53.0.2773.0中) 我希望这个循环两次,就

首先,
let
可用于循环计数器声明。这也是

由于使用了
let
,因此可以在
块的
内部更改
i
的值

for(let i = 0; i < 2; ++i) {
  setTimeout(function(){
    document.write(i + "<br>");
  }, 0);
  i = 123; // I want to block this assignment!!
}
但是,此代码将
赋值抛给常量变量。
(在Chrome 53.0.2773.0中)

我希望这个循环两次,就像first
let
示例一样,但要使计数器
I
仅在内部for循环迭代中可写

我认为这是允许的,因为似乎提到这种情况就好像isConst是真的,…,但我在MDN和其他站点中找不到这种用法(或实现状态)。Kangax的表包含对
const
绑定的测试,但不包含对它的测试。

我(在Firefox中)对它进行了测试,const绑定根据规范工作:

设i=0;
对于(常数len=3;i}
const在for循环中不起作用,因为您正在更改循环(++i)中不允许的常量值。呃,Kangax'表,Chrome确实支持它,但是
++i
应该引发异常。你所说的“代码不工作”到底是什么意思?发生了什么?这似乎是可以通过linter规则轻松解决的问题。
0
1
for(let i = 0; i < 2; ++i) {
  setTimeout(function(){
    document.write(i + "<br>");
  }, 0);
  i = 123; // I want to block this assignment!!
}
for(const i = 0; i < 2; ++i) { // throws Assignment to constant variable
  setTimeout(function(){
    document.write(i + "<br>");
  }, 0);
  i = 123; // not here...
}