为什么Coffeescript在循环中使用了一个额外的变量?

时间:2016-03-23 12:57:01

标签: coffeescript

想知道为什么Coffeescript以this方式工作:

for i in [0..10]
  return i

变为

for (i = j = 0; j <= 10; i = ++j) {
  return i;
}

而不仅仅是

for (i = 0; i <= 10; i++) {
  return i;
}

这只是因为&#34;哲学&#34;关于变量?有关安全性的事情没有覆盖它们吗?

1 个答案:

答案 0 :(得分:1)

Coffeescript中的for ... in ...循环使您可以遍历数组中的所有元素。保证原始数组中的项目具有尽可能多的迭代次数,并且将按顺序提供所有数组的元素(除非您修改原始数组)。

尝试编译

for s in ['a', 'b', 'c']
   console.log s

并查看生成的Javascript输出。

i = j = 0; j <= 10; i = ++j构造只是Coffeescript编译器完成的一项优化,以避免字面上创建数组[0..10] - 但同时,迭代变量的更改不应影响值进一步在阵列中。

As in Python,如果你想要一个更复杂的控制流而不是按顺序迭代所有数组的元素,你可以自由地使用while循环。

简单的Javascript反过来似乎遵循C关于for循环的哲学 - 程序员可以自由地引入任何更改来进行低级优化。