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

时间:2013-07-10 07:18:14

标签: javascript coffeescript

这篇CoffeeScript:

for i in [1..10]
  console.log i

编译为:

for (i = _i = 1; _i <= 10; i = ++_i) {
  console.log(i);
}

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

1 个答案:

答案 0 :(得分:11)

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

例如:

for i in [1..10]
  console.log i
  i = 7

可能已生成此代码

for (i = 1; i <= 10; ++i) {
  console.log(i);
  i = 7;
}

这显然会产生无限循环。

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

for (i = _i = 1; _i <= 10; i = ++_i) {
  console.log(i);
  i = 7;
}

循环不再是无限的,因为存在_i来跟踪循环中的位置。

相关问题