Я смотрел Javascript Основы Трэвис Тидуэлл, где он объяснил этот кусок кода:Javascript область видимости функции [Javascript Основы]
(function() {
var messages = ['hello', 'there'];
for (var i in messages) {
setTimeout(function() {
console.log(messages[i]);
}, 10);
};
})();
Это эхо «там» дважды в консоли, но я до сих пор не понимаю, именно поэтому. Может ли кто-нибудь пройти через этот кусок javascript со мной шаг за шагом?
Престола: http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example –
Это печально известная проблема «замыкания внутри петли». Вы найдете много информации, если будете искать это. По сути, причина такого поведения заключается в том, что цикл for уже завершен к моменту запуска тайм-аутов. В этот момент времени 'i' имеет значение последнего цикла для обоих тайм-аутов. – devnull69