试图清除超时,但它不起作用。 console.logging在初始化和销毁后会返回一个数字。
const timer = setTimeout(() => {});
console.log('initialised', timer); // initialised 22
clearTimeout(timer);
console.log('destroyed', timer); // destroyed 22
我期望第二个日志返回空值。我也没想到计时器是一个简单的数字。我本来希望它是一个对象。 clearTimeout在做什么它应该在这里做什么?
答案 0 :(得分:2)
timer
变量包含一个代表特定计时器的唯一数字。清除计时器将停止异步操作,但是您的变量仍然仅仅是变量,它将保留您提供的最后一个值,除非它超出范围或为它分配其他内容。
最好的证明您的代码可以正常工作的方法是,给计时器回调函数一些行为,然后查看该行为是否正确。使用您的代码,我们将看到计时器回调函数从未真正运行过(没有回调函数的消息写入控制台),因为您在创建它的函数完成之前就将其取消。除该语句外,我们不需要多余的console.log()
语句。
const timer = setTimeout(() => { console.log("The timer function has run!" ); });
clearTimeout(timer);
注意::在大多数情况下,我们不需要知道timer
变量的实际值。我们只需要存储它就可以在以后终止其相应的计时器操作。
答案 1 :(得分:0)
clearTimeout确实在完成预期的工作。创建超时时,它将返回一个唯一的数字,在这种情况下,您将其保存在“ timer”变量中。现在,当您清除超时时,它将停止setTimeout执行,但不会删除变量“ timer”
答案 2 :(得分:0)
我希望第二个日志返回空值。
timer
是一个简单的变量,其中包含一个数字(计时器的ID)。进行clearTimeout
不会更改其值,但是清除超时,即停止计时器。
我希望它是一个对象
为什么?没有什么可存储的。这是一个简单的数字,第一个计时器从1开始,第二个计时器从2开始,依此类推。
答案 3 :(得分:0)
setTimeout
定义一个计时器,并返回一个数字,该数字是该计时器的唯一ID。
clearTimeout
获取计时器ID并将其取消。
由于JavaScript中的数字值是不可变的,并且您基本上是将timer
变量的值发送到clearTimeout
函数,因此语言或浏览器无法更改变量的值,因此数字不会改变您的功能范围,结果是您在两个日志中仍然看到相同的数字。
但是,它确实取消了超时,因此只要您在调用setTimeout
之前调用了它,就不会调用您发送到clearTimeout
的函数。
有关setTimeout和clearTimeout的更多信息。
答案 4 :(得分:0)
让我们了解这些函数的返回值。
返回的
创建的计时器timeoutID
是一个正整数,用于标识 通过调用setTimeout();
此值可以传递给clearTimeout()来取消超时。
保证setTimeout()
将始终返回ID(数字)而不是对象。
clearTimeout()
的返回值为undefined
。
此外,我还要补充一点,在Javascript中,类型number
总是按值传递。因此,当您将其传递给函数时,不要期望它会发生变化。就像您的情况一样,
clearTimeout(timer);
这样的调用永远无法更改传递的变量(类型number
)的值(在源头)。