javascript的一些知识

setInterval 的堆调用

setTimeout 只会执行回调函数一次,不过 setInterval - 正如名字建议的 - 会每隔 X 毫秒执行函数一次。 但是却不鼓励使用这个函数。 JavaScript 秘密花园 其它 45 当回调函数的执行被阻塞时, setInterval 仍然会发布更多的回调指令。在很小 的定时间隔情况下,这会导致回调函数被堆积起来。

 

function foo(){

// 阻塞执行 1 秒

}

setInterval(foo, 100);

上面代码中, foo 会执行一次随后被阻塞了一秒钟。 在 foo 被阻塞的时候, setInterval 仍然在组织将来对回调函数的调用。 因 此,当第一次 foo 函数调用结束时,已经有 10 次函数调用在等待执行。

 

处理可能的阻塞调用

最简单也是最容易控制的方案,是在回调函数内部使用 setTimeout 函数。

function foo(){

  // 阻塞执行 1 秒

  setTimeout(foo, 100);

}

foo();

这样不仅封装了 setTimeout 回调函数,而且阻止了调用指令的堆积,可以有更 多的控制。 foo 函数现在可以控制是否继续执行还是终止执行。

 

手工清空定时器

可以通过将定时时产生的 ID 标识传递给 clearTimeout 或者 clearInterval 函数来清除定时, 至于使用哪个函数取决于调用的时候使用的是 setTimeout 还 是 setInterval 。

var id = setTimeout(foo, 1000);

clearTimeout(id);

清除所有定时器

由于没有内置的清除所有定时器的方法,可以采用一种暴力的方式来达到这一目 的。

// 清空"所有"的定时器

for(var i = 1; i < 1000; i++) {

  clearTimeout(i);

}

posted @ 2017-11-09 17:20  呱呱二号  阅读(122)  评论(0编辑  收藏  举报