为什么CoffeeScript以这种方式编译for循环?

Der*_*ang 7 javascript coffeescript

这篇CoffeeScript:

for i in [1..10]
  console.log i
Run Code Online (Sandbox Code Playgroud)

编译为:

for (i = _i = 1; _i <= 10; i = ++_i) {
  console.log(i);
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它不只是使用i.有任何想法吗?

lon*_*day 11

我对CoffeeScript不是很熟悉,但我的猜测是防止i在循环中修改变量.

例如:

for i in [1..10]
  console.log i
  i = 7
Run Code Online (Sandbox Code Playgroud)

可能已生成此代码

for (i = 1; i <= 10; ++i) {
  console.log(i);
  i = 7;
}
Run Code Online (Sandbox Code Playgroud)

这显然会产生无限循环.

但是,CoffeeScript的版本意味着会发生这种情况:

for (i = _i = 1; _i <= 10; i = ++_i) {
  console.log(i);
  i = 7;
}
Run Code Online (Sandbox Code Playgroud)

由于存在_i跟踪循环中的位置,循环不再是无限的.