setTimeout似乎执行过快

9

我一直在尝试使用setTimeout和setInterval,但无法使代码按照我想要的方式执行。我的目标是创建一个setInterval,每三秒钟调用一次,并在十秒钟后清除它。然而,当我在firebug中运行代码时,我只得到一个数字,我认为这是setInterval的id,因为每次我执行代码时,这个数字都会增加。

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


setTimeout(clearInterval(intID), 10000);
2个回答

21

这个陈述:

setTimeout(clearInterval(intID), 10000);

意思是,“调用函数'clearInterval'并传递变量'intID'的值,然后将其返回值和数字10000传递给函数'setTimeout'。”

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

相反,将setTimeout()传递一个函数:

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

4
您需要这样设置间隔时间,而不是这样:

没有像这样设置间隔时间:

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

如果这么做,console.log会立即被调用——甚至在setInterval之前,因为它是setInterval的一个参数,而参数必须在调用使用它们的函数之前被评估。
那么,为什么要这样设置超时呢
setTimeout(clearInterval(intID), 10000);

这会导致与上述问题完全相同的问题。
只需像设置间隔时所做的那样进行操作:
setTimeout(function() { clearInterval(intID); }, 10000);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接