为了账号安全,请及时绑定邮箱和手机立即绑定

小白请教一个关于setTimeout的问题?

小白请教一个关于setTimeout的问题?

一只萌萌小番薯 2019-03-05 17:14:29
1.第一种情况,setTimeout的第一个参数写函数名,可以正确执行,并且函数执行有延迟效果var cards = document.getElementsByClassName('card');    for(let i=0;i<cards.length;i++){        setTimeout(show,1000*i);    }    //动画    function show(){        console.log(new Date());    }2.第二种情况,setTimeout的第二个参数函数带参数,可以执行,但是没有延迟效果;var cards = document.getElementsByClassName('card');    for(let i=0;i<cards.length;i++){        setTimeout(show(i),1000*i);    }    //动画    function show(i){        console.log(new Date());    }这是为什么呢?带参数的写成这样就会有正确的效果setTime(function(){    show(i)},1000*i)求解答
查看完整描述

4 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

你这个是把show()的返回值当setTimeout的第一个参数执行
setTimeout(show,1000*i,i);第三个和之后的都是第一个参数的参数

查看完整回答
反对 回复 2019-03-14
?
www说

TA贡献1775条经验 获得超8个赞

setTimeout(show(i),1000*i);

setTimeout语句执行前,show(i)已经被执行


setTimeout函数要求第一个参数为一个函数


正确的代码:


    var cards = document.getElementsByClassName('card');

    for(let i=0;i<cards.length;i++){

        setTimeout((function(i){

            return function(){

                show(i);

            }

        }(i)),1000*i);

    }

    //动画

    function show(i){

        console.log(new Date());

    }


查看完整回答
反对 回复 2019-03-14
?
SMILET

TA贡献1796条经验 获得超4个赞

楼上正解,show(i)在setTimeout语句执行前已经被执行了,它已经是一个结果了,所以setTimeout(show(i),1000i);即为setTimeout(一个结果,1000i);
自然是没有解的,而打印出来的值其实是show(i)执行的结果,所以自然没有延时效果

查看完整回答
反对 回复 2019-03-14
?
Qyouu

TA贡献1786条经验 获得超11个赞

settimeout(show(),i) 你这表示是执行函数.是函数自己执行.而不是定时器去调用
settimeout(show,i) 这是调用函数. 和传参不传参一点关系没有.

settimeout(function(){

show();

})

这是创建个函数去调用.新创建的函数被定时器调用.所有也会有延迟.

这就是一个函数调用的问题.仔细思考就明白了


查看完整回答
反对 回复 2019-03-14
  • 4 回答
  • 0 关注
  • 476 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信