学习Javascript,无法弄清楚为什么这两个功能不同。我看到了这个例子(我在函数中添加了名称):
var txt = ["a","b","c"];
for (var i = 0; i < 3; ++i ) {
setTimeout((function myBind(msg) {
return function myAlert() { alert(msg); }
})(txt[i]), 1000);
}
我看到正在返回一个调用警报的函数。所以我想,为什么不直接返回它:
var txt = ["a","b","c"];
for (var i = 0; i < 3; ++i ) {
setTimeout( function() { alert(txt[i]);} ,1000);
}
这最终会警告“未定义”。我知道这是因为它试图访问 txt[3] 因为一秒钟后循环完成并且 i 已设置为 3,但我不明白原始设置如何避免此问题。