javascript - 我可以对同一个 id 调用两次clearInterval吗?

标签 javascript

我正在使用这种繁琐的逻辑:

function handle_register_after_pressed(){
    if (typeof handle_register_after_pressed.sid !== "undefined" && ff_handle_register_after_pressed.sid)
    {
        clearInterval(handle_register_after_pressed.sid);
        ff_handle_register_after_pressed.sid = 0;
    }
    handle_register_after_pressed.sid = setInterval(function(){},1000);
}

我想取消旧的 setInterval 并在再次调用该函数时重新启动它。

是否可以使用这种方式:

function handle_register_after_pressed(){
     if (typeof handle_register_after_pressed.sid !== "undefined" )
     {
         clearInterval(handle_register_after_pressed.sid);
     }
     handle_register_after_pressed.sid = setInterval(function(){},1000);
 }

所以我想问:

  • 如果从 setTimeout 返回的 ID,clearInterval 是唯一的并且不断增加?
  • 在相同的返回 ID 上再次调用 setTimeoutclearInterval 没有问题
  • 当 id 为 0 或 null 或 undefined 时,我们也可以调用 setTimeoutclearInterval 而不会产生异常。

最佳答案

setInterval 的返回值只是一个唯一的数字,用于传回clearInterval。它不是一个具有任何附加信息的对象。

所以这段代码if (typeof handle_register_after_pressed.sid !== "undefined")将不起作用,因为在执行clearInterval之后handle_register_after_pressed.sid不会被设置为undefined或null。

如果您想知道间隔是否已清除,您需要提出如下所示的自定义解决方案,

function mySetInterval(fn, interval) {
    var id = setInterval(fn, interval);
    this.cleared = false;
    this.clear = function () {
        this.cleared = true;
        clearInterval(id);
    };
}

然后这样调用它,

var t = new mySetInterval(function () {
    console.log('this is a test');
}, 5000);
console.log(t.cleared); // false
t.clear();
console.log(t.cleared); // true

回答您的其余问题,

  1. 是的,setTimeout 和 setInterval 返回的 id 在当前网页的生命周期内是唯一的。此外,setInterval() 和 setTimeout() 使用的 ID 池是共享的,这意味着它是一个不断增加的计数器。

  2. 如果您对同一 ID 调用clearInterval,则没有问题。一旦生成了间隔 ID,即使清除该间隔(直到当前网页的生命周期),它也不会返回到 ID 池。

  3. 如果您使用无效参数(例如 null 或 undefined 或 0)调用clearInterval,它不会产生问题。它不会抛出任何异常。你很安全。

关于javascript - 我可以对同一个 id 调用两次clearInterval吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51317692/

相关文章:

javascript - 如何让我的文本在 Unity 中显示我的分数?

javascript - 登录表单不会消失

javascript - 类型错误和短路评估?

javascript - 没有JS的弹出提示

javascript - Jquery 和 JSON : Replace section of JSON array

javascript - 优化我的猜测算法

javascript - 如何使用 createjs 定位 MovieClip

javascript - 附加的 div 不是 DOM 的一部分

javascript - Express:在子路由上提供 Webpack 包

javascript - 如何修复或抑制误报 "You may have an infinite update loop in a component render function"Vue 警告