您的第二个示例绝对不应该工作,因为i声明一次而不是在每次迭代时,这只是该类循环如何工作的函数。
您可以在常规浏览器中尝试此操作:
for (var i = 0, otherVar = ""; i < [1,2,3,4].length; i += 1){
console.log(otherVar)
otherVar = "If otherVar was initialized on each iteration, then you would never read me.";
}
const在for循环中并不是完全不允许的情况。只有for那会修改 const 才是。
这些是有效的:
for(const i = 0;;){ break }
for(const i = 0; i < 10;){ break; }
这些是无效的:
for(const i = 0;;){ ++i; break; }
for(const i = 0;;++i){ if(i > 0) break; }
我不知道为什么 Firefox 在阅读 ES2015 规范后会给出一个 SyntaxError(虽然我确信 Mozilla 的聪明人是正确的),它似乎应该引发一个异常:
在环境记录中创建一个新的但未初始化的不可变绑定。字符串值 N 是绑定名称的文本。如果 S 为真,则尝试在初始化之前访问绑定的值或在初始化之后设置它总是会抛出异常,无论引用该绑定的操作的严格模式设置如何。S 是一个可选参数,默认为 false。