鍍金池/ 問(wèn)答/HTML/ 來(lái),把settimeout的代碼改成我們想要的結(jié)果

來(lái),把settimeout的代碼改成我們想要的結(jié)果

const obj = {
    name: " jsCoder",
    skill: ["es6", "react", "angular"],
    say: function () {
        for (var i = 0, len = this.skill.length; i < len; i++) {
            setTimeout(function(){
                console.log(i);
                console.log(this.skill[i]);
            }(i), 0)
            console.log(i);
        }
    }
};
obj.say();

改成settimeout中可以正常順序打印i和依次打印skill,大家都懂的,有哪些方法,各位發(fā)揮

回答
編輯回答
蟲(chóng)児飛

const obj = {

    name: " jsCoder",
    skill: ["es6", "react", "angular"],
    say: function () {
        this.skill.forEach(function(item,index){
            setTimeout(function(){
                console.log(index)
                console.log(item);
            },0)
        })
    },
    say2:function(){
        for (var i = 0, len = this.skill.length; i < len; i++) {
            setTimeout(function(i,item){
                console.log(i);
                console.log(item);
            },0,i,this.skill[i]);
        }
    },
    say3:function(){
        const arr=this.skill.slice();
        let i=0;
        function pop(){
            const item=arr.shift();
            if(item){
                console.log(i);
                console.log(item);
                i++;
                setTimeout(pop,0);
            }
        }
        setTimeout(pop,0);
    }
};
obj.say();
setTimeout(function(){
    obj.say2();
},1000)
setTimeout(function(){
    obj.say3();
},2000)
2017年5月12日 06:19
編輯回答
耍太極

function passTheRiver(){

const obj = {
    "count":0,
    name: " jsCoder",
    skill: ["es6", "react", "angular"],
    say: function () {
        var that = this;
        for (var i = 0, len = this.skill.length; i < len; i++) {
            setTimeout(function(){
                console.log(that.count);
                console.log(that.skill[that.count]);
                that.count++;
            }, 0)
            console.log(i);
        }
    }
};
obj.say();
2018年5月23日 07:54
編輯回答
女流氓
          say: function ()
            {
                var that = this;
                for (var i = 0, len = this.skill.length; i < len; i++)
                {
                    setTimeout(function()
                        {
                            console.log(i);
                            console.log(that.skill[i]);
                        }(i), 0)
                    console.log(i);
                }
            }
2018年7月15日 14:58
編輯回答
祈歡
say: function () {
    for (var i = 0, len = this.skill.length; i < len; i++) {
        setTimeout(((i) => {
                        return () => {
                            console.log(i);
                            console.log(this.skill[i]);
                        }
                    })(i), 0)
        console.log(i);
    }
}
2018年3月21日 06:10