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

JavaScript:setInterval和clearInterval,哪种方式正确?,javascript,setinterval,clearinterval,Javascript,Setinterval,Clearinterval,在使用setInterval和clearInterval时,哪种方法正确且更有效 一, 二, 编辑: 对于2,我的意思是setTimeout而不是clearInterval。已被更改。我假设您传递到clearInterval的时间间隔应该是某种东西 第二个示例永远不会触发计时器,因为您在设置计时器后立即清除它。您还将一个参数7000传递到clearInterval,它不会被使用,只接受一个参数 您的第一个示例是正确的,前提是您希望在处理程序中调用clearInterval时清除重复计时器。这大概

在使用setInterval和clearInterval时,哪种方法正确且更有效

一,

二,

编辑:

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

我假设您传递到clearInterval的时间间隔应该是某种东西

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

您的第一个示例是正确的,前提是您希望在处理程序中调用clearInterval时清除重复计时器。这大概是在if或类似的函数中,因为如果您想要一个一次性的定时回调,您将使用,而不是setInterval

编辑:

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


这完全改变了问题。不,那不对。setInterval计划在给定的时间间隔内重复调用函数,但不将其返回值传递给setTimeout。

如果需要重复执行某个操作,则使用setInterval如果只需要执行一次使用setTimeout,则可以通过一个接一个链接多个超时来模拟setInterval。超时只发生一次,因此您无需清除它们。此外,clearInterval不接受时间参数,因此您设置的间隔将在执行之前被清除,因为经典javascript是同步的。

为了完成回答,请注意setInterval。如果由于某种原因,你的…加载某物所需的时间比加载时间长。此时它将不执行此操作,并将等待下一次调用setinterval。
我鼓励尽可能多地使用setTimeout。

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

对于您的案例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);

您使用全局变量something引用处理程序,但使用interval引用它。这取决于您正在执行的操作。2肯定是不对的。你甚至在它有机会运行之前就已经清除了间隔。1可能是正确的,但由于您是在间隔第一次运行时清除间隔,因此您可能应该使用setTimeout;这两种情况都适用。此外,clearInterval只接受单个参数。请参阅clearInterval函数仅接受一个参数,即setInterval返回的间隔ID。资料来源:你说得对,间隔本应该是某种东西。一个打字错误。你是对的,间隔本应该是什么。打字错误。已经纠正了。
var something = setInterval(function() {
    // Do stuff, and determine whether to stop or not

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

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