鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ for循環(huán)里面加上setTimeout,不用閉包的方法怎么讓他挨個返回12345

for循環(huán)里面加上setTimeout,不用閉包的方法怎么讓他挨個返回12345的數(shù)字?

  for(var i =0;i<5;i++){
        setTimeout(function () {
            console.log(i);  //輸出5個5 ,不用閉包,也不用let,怎么改改讓他輸出12345?
        },0)
    }
回答
編輯回答
空白格

可以看下這篇文章,能學(xué)到很多

https://zhuanlan.zhihu.com/p/...

2018年5月12日 21:08
編輯回答
陌上花

把var 改成 let
或者

for(var i =0;i<5;i++){
        setTimeout((function (i) {
            console.log(i);  //輸出5個5 ,不用閉包怎么改改讓他輸出12345?
        }).bind(null,i),0)
    }

再或者

for(var i =0;i<5;i++){
        setTimeout(function (i) {
            console.log(i);  //輸出5個5 ,不用閉包怎么改改讓他輸出12345?
        },0,i)
    }

但也不算完全不是閉包吧

2017年9月5日 12:35
編輯回答
單眼皮

把var改成let
let申明的變量具有塊級作用域.

2017年8月9日 12:10
編輯回答
別硬撐
for(let i=0;i<5;i++){
    setTimeout(function(){
        console.log(i);//0,1,2,3,4
    },0)
 }
2018年2月17日 13:19
編輯回答
笑浮塵
var arrayIteratpr={
    values:[0,1,2,3,4],
    currentIndex:-1,
    next:function(){
        this.currentIndex++;
        if(this.currentIndex===this.values.length){
            return undefined;
        }else{
             return this.values[this.currentIndex];
        }
    }
};

var timerLogic=function(){
    var value=this.next();
    if(Object.prototype.toString.call(value)==="[object Undefined]"){
        console.log("done");
    }else{
        console.log(value);
        setTimeout(timerLogic,0)
    }
}.bind(arrayIteratpr);

setTimeout(timerLogic,0);
2018年9月4日 10:05