我正在阅读 JS忍者的秘密(第二版)。在第5.2.2章中,有一个演示,显示了在使用间隔回调时污染全局范围的问题。
https://jsfiddle.net/tinachen/8fd8t355/
通过在调试器中查看这些变量,我了解timer
设置为2
(box2的间隔ID)。
我的问题是为什么这两个间隔仍然存在
交替地,当clearInterval(timer);
执行时,box2的间隔被清除,为什么box1的间隔仍然在运行?为什么一个区间id可以同时管理两个区间?
答案 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
中存储不同的值来破坏该值。