延迟函数,闭包

延迟函数的回调是在循环结束时才执行。当定时器在运行时即使每个迭代中执行的是setTimeout(…,0),所有的回调函数依然是在循环后才会被执行。因此每次都输出6.尽管循环中的五个函数是在各个迭代中分别定义的,但是他们都被封闭在一个共享的全局作用域中,因此实际上只有一个i。

for(var i=1;i<=5;i++){
    (function () {
        setTimeout(function timer() {
            console.log(i);
        },i*1000);
    })();
}  //输出5次 6

解决方法:

for(var i=1;i<=5;i++){
    (function () {
        var j=i;
        setTimeout(function timer() {
            console.log(j);
        },j*1000);
    })();
}

for(var i=1;i<=5;i++){
    (function (j) {
        setTimeout(function timer() {
            console.log(j);
        },j*1000);
    })(i);
}
--------------------- 
原文:https://blog.csdn.net/caoxinhui521/article/details/78011309 

猜你喜欢

转载自blog.csdn.net/yijiupingfan0914/article/details/85335870