为什么一个区间id可以同时管理两个区间?

时间:2017-02-27 06:23:50

标签: javascript

我正在阅读 JS忍者的秘密(第二版)。在第5.2.2章中,有一个演示,显示了在使用间隔回调时污染全局范围的问题。

https://jsfiddle.net/tinachen/8fd8t355/

通过在调试器中查看这些变量,我了解timer设置为2(box2的间隔ID)。

我的问题是为什么这两个间隔仍然存在 交替地,当clearInterval(timer);执行时,box2的间隔被清除,为什么box1的间隔仍然在运行?为什么一个区间id可以同时管理两个区间?

1 个答案:

答案 0 :(得分:0)

它没有管理2个间隔。在以下代码中:

console.log("box1 call")
animateIt('box1');
// timer is now 1
console.log("box2 call")
animateIt('box2');
// timer is now immediately overwritten and becomes 2

第一次拨打animateIt电话setInterval,设置第一个timer值。紧接着,第二次调用将覆盖该值。由于全局范围的性质,只有对setInterval的第二次调用具有存储在timer变量中的值。因此,对setInterval的第一次调用将永远循环,因为通过调用在timer中存储不同的值来破坏该值。