Без обид, я просто в шоке, неужели вы все такие, чрезмерно, абсолютно, критично, бескомпромисно дотошные@Muranx, без этого не стать программистом (сарказм). Ну если серьезно, машины не понимают разночтений, если Вы им пишите что-то не так, то они бескомпромиссно и абсолютно шлют Вас на хер и отказываются работать. А программисты все таки большую часть времени общаются с машинами и их задача, чтоб они работали, притом работали решая конкретную задачу, не какую то там, а опять таки чрезмерно, абсолютно, критично, бескомпромиссно дотошно конкретно эту.
for(var k = 0; k < 3; k++) {
(function(k) {
setTimeout(function() {
console.log(k); // 1, 2, 3
}, 500);
})(k);
}
for(var k = 0; k < 3; k++) {
setTimeout(function(k) {
return function() {
console.log(k); // 1, 2, 3
}
}(k), 500);
}
Правда тут уже будет создано 6 функций в памяти на 3 итерации, хотя и IIFE быстро подберется сборкой мусораfor(var k = 0; k < 3; k++) {
setTimeout(function(k){
console.log(k); // 1, 2, 3
}.bind(void 0, k), 500);
}
На деле функций в памяти так же будет 6, да еще и работает медленнее предыдущих, ибо много всяких if под капотомfunction onTimeout(k) {
console.log(k); // 1, 2, 3
}
for(var k = 0; k < 3; k++) {
setTimeout(onTimeout, 500, k);
}