function tttt() {
for (var i = 0; i < 4; i++) {
setTimeout(function(){
console.log(i);
}, 1000)
}
}假设我有上面这样一个javascript函数, 那么用如下方式调用tttt函数得到的结果是?
0 2 3 4,应该是这样的答案,对不对?哈哈哈,我就是这样以为的,事实上,得到的结果是4 4 4 4,原因是在4个匿名函数被运行的时候,i的值已经被修改成了4,所以我们得到了4 4 4 4 4 这样的结果,那么,如何才能得到0 1 2 3 呢,代码如下所示:
function tttt2() {
for (var i = 0; i < 4; i++) {
(function(i) {
setTimeout(function(){
console.log(i);
}, 1000)
})(i)
}
}
tttt2();
JavaScript定时器闭包问题

3541

被折叠的 条评论
为什么被折叠?



