setTimeout appears to execute too fast

天大地大妈咪最大 提交于 2019-12-10 02:54:30

问题


I've been fiddling around with setTimeout and setInterval, and I cannot get the code to execute the way I would like it to. My goal is to create a setInterval, which calls once every three seconds, and have it clear after ten seconds. However, when I run the code in firebug, the only thing I get is a number, which I assume is the id of setInterval because every time I execute the code, the number increases.

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


setTimeout(clearInterval(intID), 10000);

回答1:


This statement:

setTimeout(clearInterval(intID), 10000);

means, "call the function 'clearInterval' passing the value of variable 'intID', and then pass the return value of that and the number 10000 to the function 'setTimeout'."

In other words, you're calling the function "clearInterval" and then passing the returned value to setTimeout().

Instead, pass setTimeout() a function:

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



回答2:


You are not setting up the interval like this:

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

If you did, console.log would be called immediately -- even before setInterval, since it's an argument to setInterval and arguments have to be evaluated before calling the function that uses them.

So why are you setting up the timeout like this?

setTimeout(clearInterval(intID), 10000);

This causes the exact same kind of problem as above.

Just do the same thing you did when setting up the interval instead:

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


来源:https://stackoverflow.com/questions/24336913/settimeout-appears-to-execute-too-fast

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!