この CoffeeScript をコンパイルすると:
funcs = ((=> console.log i) for i in [0..2])
funcs[0]() // Prints 3
funcs[1]() // Prints 3
funcs[2]() // Prints 3
次の JavaScript が生成されます。
(function() {
var funcs, i;
funcs = (function() {
var _i, _results,
_this = this;
_results = [];
for (i = _i = 0; _i <= 3; i = ++_i) {
_results.push(function() {
return console.log(i);
});
}
return _results;
}).call(this);
funcs[0]();
funcs[1]();
funcs[2]();
funcs[3]();
}).call(this);
代わりに次のようになると思います:
_results.push((function(i) {
return function() {
return console.log(i);
}})(i));
誰かがそれをしていない理由を説明できますか?