Javascript 我可以用同一个id调用clearInterval两次吗?
我使用的是一种繁琐的逻辑:Javascript 我可以用同一个id调用clearInterval两次吗?,javascript,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_handl
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);
}
所以我想问:
- 如果id是从
返回的,setTimeout
是唯一的并且不断增加的吗clearInterval
- 在同一个返回的id上再次调用
,setTimeout
,没有问题clearInterval
- 当id为0或null或
我们也可以调用未定义时
,setTimeout
,而不会生成异常clearInterval
if(按下.sid后的句柄寄存器类型!=“未定义”)
将不起作用,因为按下.sid后的句柄寄存器在执行clearInterval后不会设置为未定义或空
如果您想知道是否清除了间隔,则需要提出如下自定义解决方案
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
要回答你剩下的问题
setInterval的返回值只是用于传递回clearInterval的唯一数字。它不是包含任何附加信息的对象 因此,此代码
if(按下.sid后的句柄寄存器类型!=“未定义”)
将不起作用,因为按下.sid后的句柄寄存器在执行clearInterval后不会设置为未定义或空
如果您想知道是否清除了间隔,则需要提出如下自定义解决方案
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
要回答你剩下的问题
那么,为什么不在全局范围内定义一个变量,并在函数中清除/重置它。。。也许让间隔检查它也是当前时间,所以当它达到0时,它可以重置或清除,这取决于你的期望。。。你说的“同一身份证上两次”是什么意思?您的意思是对具有相同ID的多个或同一个调用clearinterval两次?
typeof handle\u register\u在按下.sid之后!==未定义的
不执行任何操作。未定义的值的计算结果为falsey,您的if
语句只有在定义了handle\u register\u之后才能计算为true,由于setInterval的返回值为非零,因此只有当您有一个有效的intervals时,它才应该为真。为什么不在全局范围中定义一个变量,并在函数中清除/重置它。。。也许让间隔检查它也是当前时间,所以当它达到0时,它可以重置或清除,这取决于你的期望。。。你说的“同一身份证上两次”是什么意思?您的意思是对具有相同ID的多个或同一个调用clearinterval两次?typeof handle\u register\u在按下.sid之后!==未定义的
不执行任何操作。未定义的值的计算结果为falsey,您的if
语句只能在定义了handle\u register\u之后才计算为true。sid
,并且由于setInterval的返回值为非零,因此只有在具有有效间隔时才应为true