来,把settimeout的代码改成我们想要的结果

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,大家都懂的,有哪些方法,各位发挥

阅读 2.6k
4 个回答

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)
          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);
                }
            }
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);
    }
}

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();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题