想知道为什么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;关于变量?有关安全性的事情没有覆盖它们吗?
答案 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
循环的哲学 - 程序员可以自由地引入任何更改来进行低级优化。