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

Javascript 为什么一个间隔id可以同时管理两个间隔?,javascript,Javascript,我正在读JS忍者的秘密(第二版)。在第5.2.2章中,有一个演示演示了在使用间隔回调时污染全局范围的问题 通过在调试器中查看这些变量,我了解到timer设置为2(框2的间隔id) 我的问题是,为什么这两个区间仍在运行 或者,当清除间隔(计时器)时已执行,box2的间隔已清除,为什么box1的间隔仍在运行?为什么一个间隔id可以同时管理两个间隔 它没有管理2个间隔。在以下代码中: console.log("box1 call") animateIt('box1'); // timer is no

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

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

我的问题是,为什么这两个区间仍在运行
或者,当
清除间隔(计时器)时已执行,box2的间隔已清除,为什么box1的间隔仍在运行?为什么一个间隔id可以同时管理两个间隔

它没有管理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
,设置第一个
计时器
值。紧接着,该值被第二次调用覆盖。由于全局作用域的性质,只有对
setInterval
的第二次调用将值存储在
timer
变量中。因此,对
setInterval
的第一次调用将永远循环,因为通过调用将不同的值存储在
timer

timer
中而对该值进行了阻塞,但这两个间隔的
timer
并没有设置为2,请参阅。看起来是这样的,因为在原始代码中,您记录了它的值,而第二个函数调用已经覆盖了它。@JJJ,如果它不是两个区间函数,为什么参数
elementId
交替显示?对不起,您似乎完全误解了注释。我没说没有两次间隔。我说有两个计时器引用,所以“为什么一个间隔id可以同时管理两个间隔?”是一个错误的前提,因为有两个间隔id,而不是一个。谢谢!我得到了它。box1的Interval函数将永远循环以清除box2的Interval id。因此。。。我应该删除这个问题还是更改标题?问题很好,这是原始问题,已得到回答,因此无需更改任何内容。