Javascript 调用clearInterval的时间有什么不同吗?

Javascript 调用clearInterval的时间有什么不同吗?,javascript,Javascript,A部分: B部分: var interval = setInterval(function(){ doSomething(); if(...) clearInterval(interval); }, 100); 有什么不同吗?虽然我认为在您的特定示例中这是不正确的,但值得指出的是,如果您的函数是异步的,那么这两个函数将是不同的 下面,我模拟了doSomething()500毫秒: 功能睡眠(毫秒){ 返回新承诺(resolve=>setTimeout(resolve,ms))

A部分:

B部分:

var interval = setInterval(function(){
  doSomething();
  if(...)
    clearInterval(interval);
}, 100);

有什么不同吗?

虽然我认为在您的特定示例中这是不正确的,但值得指出的是,如果您的函数是异步的,那么这两个函数将是不同的

下面,我模拟了
doSomething()
500毫秒:

功能睡眠(毫秒){
返回新承诺(resolve=>setTimeout(resolve,ms));
}
异步函数doSomething(){
log(“你好世界”);
等待睡眠(500);
}
var interval=setInterval(异步函数(){
等待做某事();
间隔时间;

}, 100);虽然我认为在您的特定示例中这是不正确的,但值得指出的是,如果您的函数是异步的,那么这两个函数将是不同的

下面,我模拟了
doSomething()
500毫秒:

功能睡眠(毫秒){
返回新承诺(resolve=>setTimeout(resolve,ms));
}
异步函数doSomething(){
log(“你好世界”);
等待睡眠(500);
}
var interval=setInterval(异步函数(){
等待做某事();
间隔时间;

}, 100);在Chrome中,我看不出有什么不同

在这里,我甚至等了1200毫秒,但hello只被控制台记录了一次

我在这里制作了一个片段,用于测试其他浏览器

它应该只触发一次的原因是,计时器在下一个滴答声中触发,因此即使已过100毫秒,也无法执行另一个设置的间隔,但到它可以执行时,间隔已清除

说了这么多,看看是否所有的浏览器都有这样的行为会很有趣

更新:在Edge/IE11/Chrome和Firefox中进行测试,所有功能都相同。IOW:函数体前后的clearInterval没有区别

var i=setInterval(函数(){
var t=new Date().getTime();
while(new Date().getTime()-t<1200);
console.log(“你好”);
间隔时间(i);

}, 100);在Chrome中,我看不出有什么不同

在这里,我甚至等了1200毫秒,但hello只被控制台记录了一次

我在这里制作了一个片段,用于测试其他浏览器

它应该只触发一次的原因是,计时器在下一个滴答声中触发,因此即使已过100毫秒,也无法执行另一个设置的间隔,但到它可以执行时,间隔已清除

说了这么多,看看是否所有的浏览器都有这样的行为会很有趣

更新:在Edge/IE11/Chrome和Firefox中进行测试,所有功能都相同。IOW:函数体前后的clearInterval没有区别

var i=setInterval(函数(){
var t=new Date().getTime();
while(new Date().getTime()-t<1200);
console.log(“你好”);
间隔时间(i);

}, 100);它的行为应该是一样的,但我不是专家。被视为
间隔
在下一个滴答声中触发,两者的工作应该是一样的。我想知道-如果
doSomething()
需要超过100毫秒,第一个调用是否可能会多次(下一个间隔在被清除之前触发),而第二个确保它不会有问题?@TylerRoper在Chrome中没有区别,但可能其他浏览器不同。它的行为应该是一样的,但我不是专家。如果在下一个滴答声中看到
间隔
触发,两者的工作应该是一样的。我想知道
doSomething()
是否需要超过100毫秒,第一个可能会多次调用(下一个间隔将在被清除之前触发),而第二个确保不会调用吗?@TylerRoper在Chrome中它没有区别,但其他浏览器可能会有所不同。这是在模拟一个不同的问题。@Keith我将还原它,但要解决一个事实,即它特别适用于异步。原因是,虽然它可能不适用于这个确切的例子,但我认为它提供了一个例子,移动
clearInterval()
可能会有所不同,这似乎符合问题的精神。无论如何,考虑到OP的代码,我认为你的例子更合适,所以我对它进行了升级。我同意,恢复是个好主意。并指出
async/await
如何改变事情是有意义的。这是在模拟一个不同的问题。@Keith我将还原它,但要说明它专门与异步相关的事实。原因是,虽然它可能不适用于这个确切的例子,但我认为它提供了一个例子,移动
clearInterval()
可能会有所不同,这似乎符合问题的精神。无论如何,考虑到OP的代码,我认为你的例子更合适,所以我对它进行了升级。我同意,恢复是个好主意。并指出
async/await
如何改变事情是有意义的。
var interval = setInterval(function(){
  if(...)
    clearInterval(interval);
  doSomething();
}, 100);