clearTimeout 没有清除超时

aby*_*e85 6 javascript

试图清除超时但它不起作用。console.logging 它在初始化和销毁​​后返回一个数字。

    const timer = setTimeout(() => {});
    console.log('initialised', timer); // initialised 22
    clearTimeout(timer);
    console.log('destroyed', timer); // destroyed 22
Run Code Online (Sandbox Code Playgroud)

我期待第二个日志返回空值。我也没想到计时器是一个简单的数字。我原以为它是一个对象。clearTimeout 是否在做它应该做的事情?

Sco*_*cus 3

timer变量保存代表特定计时器的唯一编号。清除计时器会停止异步操作,但您的变量仍然只是一个变量,并且它将保留您赋予它的最后一个值,除非它超出范围或您为其分配其他内容。

证明您的代码正常工作的最佳证明是为计时器回调函数提供一些行为,并查看该行为是否正确。通过您的代码,我们将看到计时器回调函数实际上从未运行(回调函数中的任何消息都不会写入控制台),因为您在创建它的函数完成之前取消了它。console.log()除此之外,我们不需要额外的声明。

const timer = setTimeout(() => { console.log("The timer function has run!" ); });
clearTimeout(timer);
Run Code Online (Sandbox Code Playgroud)

注意:在大多数情况下,我们不需要知道timer变量的实际值。我们只需要存储它,以便稍后杀死它对应的定时器操作。