setTimeout似乎执行得太快

时间:2014-06-20 23:09:24

标签: javascript settimeout setinterval clearinterval

我一直在使用setTimeout和setInterval,我无法让代码按照我希望的方式执行。我的目标是创建一个setInterval,每隔三秒调用一次,并在十秒后清除它。但是,当我在firebug中运行代码时,我唯一得到的是一个数字,我假设它是setInterval的id,因为每次执行代码时,数字都会增加。

var intID = setInterval(function() {
    console.log("I've been called");},3000);


setTimeout(clearInterval(intID), 10000);

2 个答案:

答案 0 :(得分:16)

本声明:

setTimeout(clearInterval(intID), 10000);

表示,"调用函数' clearInterval'传递变量' intID'的值,然后将其返回值和数字10000传递给函数' setTimeout'。"

换句话说,您调用函数" clearInterval"然后将返回的值传递给setTimeout()

相反,传递setTimeout()函数:

setTimeout(function() { clearInterval(intID); }, 10000);

答案 1 :(得分:3)

设置这样的间隔:

setInterval(console.log("I've been called"), 3000);

如果你这样做,console.log会被立即调用 - 甚至 setInterval之前的,因为它是setInterval的参数,并且参数有在调用使用它们的函数之前进行评估。

所以为什么要设置这样的超时

setTimeout(clearInterval(intID), 10000);

这会导致与上述完全相同的问题。

在设置间隔时,只需执行相同的操作:

setTimeout(function() { clearInterval(intID); }, 10000);