JavaScript:setInterval和clearInterval,哪种方式正确?

时间:2014-04-22 12:54:09

标签: javascript setinterval clearinterval

使用setInterval()和clearInterval()的方法是否正确且更有效?

1

something = setInterval(function() {
    try {
        ...load something
        clearInterval(something);
    } catch (e) {
      // error
    }
}, 5000);

2

 something = setInterval(function() {
    try {
        ...load something            
    } catch (e) {
      // error
    }
}, 5000);

setTimeout(something, 7000);

编辑:

对于#2,我的意思是setTimeout()而不是clearInterval()。已被更改。

4 个答案:

答案 0 :(得分:0)

我认为您interval传入的clearInterval意味着something

您的第二个示例永远不会触发您的计时器,因为您在设置后立即清除计时器。您还将参数(7000)传递给不会被使用的clearIntervalclearInterval只接受一个参数)。

您的第一个示例是提供,您希望在处理程序中调用clearInterval的位置清除重复的计时器。大概是if或类似的,因为如果你想要一次性定时回调,你可以使用setTimeout,而不是setInterval


  

编辑:

     

对于#2,我的意思是setTimeout()而不是clearInterval()。已被更改。

这完全改变了这个问题。不,那不正确。 setInterval计划在您提供的时间间隔内重复调用的函数,您不会将其返回值传递给setTimeout

答案 1 :(得分:0)

如果您需要反复发生某些事情,请使用setInterval如果您只需要使用setTimeout就可以使用setInterval(您可以通过链接多个超时来模拟clearInterval其他)。超时只发生一次,因此您无需清除它们。此外,{{1}}不会使用时间参数,因此您设置的间隔将在执行之前被清除,因为经典的javascript是同步的。

答案 2 :(得分:0)

只是为了完成答案,请小心使用setInterval()。如果你的“...加载某些东西”需要花费更多的时间来加载时间(由于某种原因或其他原因)。它将暂时不执行此操作并等待下一次setinterval调用。 我鼓励尽可能多地使用setTimeout()。

答案 3 :(得分:0)

根据我的回答您的问题,您可以在下面找到用例:

对于你的案例1:

var something = setInterval(function() {
    // Do stuff, and determine whether to stop or not

    if (stopCondition) {
        clearInterval(something);
    }
}, 5000);

对于你的案例2:

var something = setInterval(function() {
    // Do stuff
}, 5000);

// Pass a function to setTimeout
setTimeout(function() {
    clearInterval(something);
}, 17000);