JS setTimeout 循环传入参数问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS setTimeout 循环传入参数问题相关的知识,希望对你有一定的参考价值。

for(var i=0;i<4;i++)
setTimeout(function()
console.log(i);
,0);

这样输出是 4444 我应该怎么做输出0123?
我只是把问题简化,真正的问题必须调用 setTimeout

//不需要计时器
var str = \'\';
for(var i=0;i<4;i++)
    str += i+\'\';   

console.log(str)

 如果你的项目里必须用计时器,最好把关联的代码都贴出来哦~

参考技术A var i = 0;
function m()
alert(i);
i++;
setTimeout(m, 10);

setTimeout("m()", 1000);
解释:setTimeout() 只执行 code 一次。如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout()。
参考技术B 方法1:
for(var i=0;i<4;i++)
setTimeout(function(i)
console.log(i);
, 0, i);

方法2(使用let关键字):
for(let i=0;i<4;i++)
setTimeout(function()
console.log(i);
, 0;
参考技术C
for (var i = 0;i<=100;i++)

    // 用new的形式会更好吧
    (function (tag) 

        setTimeout(function () 
            console.log(tag);//tag就是i。
        ,1000*i)//相当于有100个定时器,依次在第1、2、3....100秒后执行。

    )(i)

    

两个关键,一个是参数保存下来,函数也好,对象也好,另一个是每隔多少毫秒执行就用 i 乘以多毫秒

js中的setTimeout和setinterval 用法说明

setTimeout("countSecond()", 1000);//countSecond()是函数(方法)

setTimeout 只执行一次函数,需要传递两个参数1是函数名,2是执行的时间 ;如果要循环执行函数,将setTimeout放在被执行函数里面的最后面;

setInterval("countSecond()", 1000);

setInterval  循环执行函数,需要传递两个参数1是函数名,2是执行的时间;

使用:

window.clearTimeout(对象) 可清除已设置的setTimeout对象
window.clearInterval(对象) 可清除已设置的setInterval对象

例:

var ss=setInterval("countSecond()", 1000);
window.clearInterval(ss);

 



以上是关于JS setTimeout 循环传入参数问题的主要内容,如果未能解决你的问题,请参考以下文章

关于js中setTimeout循环遇到的问题

setTimeOut与循环闭包问题

请指点js setTimeout的参数的问题

JS定时器设置快速取消

js经典面试问题:如何让for循环中的setTimeout()函数像预想中一样工作?

Js:没有函数参数的setTimeOut? [复制]