【发布时间】:2015-12-20 22:44:19
【问题描述】:
我在看 Travis Tidwell 的 Javascript Essentials,他解释了这段代码:
(function() {
var messages = ['hello', 'there'];
for (var i in messages) {
setTimeout(function() {
console.log(messages[i]);
}, 10);
};
})();
它在控制台中重复“那里”两次,但我仍然不明白为什么。有人可以和我一起一步一步地浏览这段 javascript 吗?
【问题讨论】:
-
这是臭名昭著的
closure inside loop问题。如果你搜索这个,你会发现大量的信息。本质上,这种行为的原因是 for 循环在超时触发时已经完成。在那个时间点,i具有最后一个循环的值,对于两个超时。
标签: javascript arrays function for-loop anonymous-function