Javascript 如何退出超时函数的实例?
假设您想创建一个带有setTimeout的java函数,以便它每5秒重复一次。这个定时函数只是更新一些数据。当用户单击打开覆盖的按钮时,调用就会发生,并且只要覆盖打开,函数就会继续运行。一旦覆盖关闭,放弃更新设置为true,并在计时器功能中进行检查。但是,如果用户在超时完成之前打开覆盖,它将添加超时函数的另一个实例 如何避免这种情况 (顺便说一句,计时器在JSFIDLE或bin上似乎不起作用。。但是,相同的代码在我的服务器上起作用。)Javascript 如何退出超时函数的实例?,javascript,jquery,Javascript,Jquery,假设您想创建一个带有setTimeout的java函数,以便它每5秒重复一次。这个定时函数只是更新一些数据。当用户单击打开覆盖的按钮时,调用就会发生,并且只要覆盖打开,函数就会继续运行。一旦覆盖关闭,放弃更新设置为true,并在计时器功能中进行检查。但是,如果用户在超时完成之前打开覆盖,它将添加超时函数的另一个实例 如何避免这种情况 (顺便说一句,计时器在JSFIDLE或bin上似乎不起作用。。但是,相同的代码在我的服务器上起作用。) var放弃更新=true; 函数计时器(){ 如果(!放弃
var放弃更新=true;
函数计时器(){
如果(!放弃更新){
$('.timeout').css({“背景色”):“#”+(Math.random()*0xFFFFFF我建议使用setInterval
,这样您就不需要继续重新创建超时;保存返回值,并在覆盖关闭时使用clearInterval
:
var interval = setInterval(work, 1000)
close_button.onclick = function() {
clearInterval(interval)
}
正如@Jared所提到的,javascript与Java不同:)幸运的是…我建议使用setInterval
,因此您不需要继续重新创建超时;保存返回值,并在覆盖关闭时使用clearInterval
:
var interval = setInterval(work, 1000)
close_button.onclick = function() {
clearInterval(interval)
}
正如@Jared所提到的,javascript与Java不同:)幸运的是…我建议使用setInterval
,因此您不需要继续重新创建超时;保存返回值,并在覆盖关闭时使用clearInterval
:
var interval = setInterval(work, 1000)
close_button.onclick = function() {
clearInterval(interval)
}
正如@Jared所提到的,javascript与Java不同:)幸运的是…我建议使用setInterval
,因此您不需要继续重新创建超时;保存返回值,并在覆盖关闭时使用clearInterval
:
var interval = setInterval(work, 1000)
close_button.onclick = function() {
clearInterval(interval)
}
正如@Jared提到的,javascript与Java不同:)幸运的是……让我们看一个简单的演示:
var loops = 0,
to = setTimeout(function test(){
console.log('Test run ' + ++loops + ' times.');
if (loops < 100) {
to = setTimeout(test, 3000);
}
}, 3000),
check = setTimeout(function check(){
console.log('Test checked (' + loops + ').');
if (loops > 10) {
console.log('Test setTimeout aborted.');
clearTimeout(to);
return;
}
setTimeout(check, 500);
});
让我们看一个简单的演示:
var loops = 0,
to = setTimeout(function test(){
console.log('Test run ' + ++loops + ' times.');
if (loops < 100) {
to = setTimeout(test, 3000);
}
}, 3000),
check = setTimeout(function check(){
console.log('Test checked (' + loops + ').');
if (loops > 10) {
console.log('Test setTimeout aborted.');
clearTimeout(to);
return;
}
setTimeout(check, 500);
});
让我们看一个简单的演示:
var loops = 0,
to = setTimeout(function test(){
console.log('Test run ' + ++loops + ' times.');
if (loops < 100) {
to = setTimeout(test, 3000);
}
}, 3000),
check = setTimeout(function check(){
console.log('Test checked (' + loops + ').');
if (loops > 10) {
console.log('Test setTimeout aborted.');
clearTimeout(to);
return;
}
setTimeout(check, 500);
});
让我们看一个简单的演示:
var loops = 0,
to = setTimeout(function test(){
console.log('Test run ' + ++loops + ' times.');
if (loops < 100) {
to = setTimeout(test, 3000);
}
}, 3000),
check = setTimeout(function check(){
console.log('Test checked (' + loops + ').');
if (loops > 10) {
console.log('Test setTimeout aborted.');
clearTimeout(to);
return;
}
setTimeout(check, 500);
});
它正在工作——只要将setTimeout(“timers()”,5000)
设置为setTimeout(timers,5000);
为什么不使用setInterval
来代替,以及clearInterval
当你想删除“timer”?@Goose这可能是个好主意。另外,while((Math.random()*0xFFFFFFIf如果你要创建一个java函数,你应该使用java,而不是Javascript。它们一点都不一样。clearTimeout
值得注意,因为它正在工作——只需将setTimeout(“timers()”,5000)
设置为setTimeout(timers,5000)
为什么不改用setInterval
和clearInterval
来删除“计时器”?@Goose这可能是个好主意。另外,while((Math.random()*0xFFFFFFIf如果你要创建一个java函数,你应该使用java,而不是Javascript。它们一点都不一样。clearTimeout
值得注意,因为它正在工作——只需将setTimeout(“timers()”,5000)
设置为setTimeout(timers,5000)
为什么不改用setInterval
和clearInterval
来删除“计时器”?@Goose这可能是个好主意。另外,while((Math.random()*0xFFFFFFIf如果你要创建一个java函数,你应该使用java,而不是Javascript。它们一点都不一样。clearTimeout
值得注意,因为它正在工作——只需将setTimeout(“timers()”,5000)
设置为setTimeout(timers,5000)
为什么不改用setInterval
和clearInterval
来删除“计时器”?@Goose这可能是个好主意。另外,while((Math.random()*0xFFFFFFIf如果你要创建一个java函数,你应该使用java,而不是Javascript。这一点完全不同。clearTimeout
值得注意。传递引用意味着什么?你解释得很好。当你创建一个像function test(){}这样的函数时
,它存储在内存中的某个地方。这意味着它就像一个上面有数字的盒子;这个内存盒子的数字可以用作一个引用,表示“调用此引用的内容”。当您调用setTimeout()
或setInterval()
时,当您传递字符串(“test()”)时,它将作为一个表达式进行评估,这是一个缓慢且可能存在问题的表达式。相反,只通过传递名称(而不是()
)给它一个函数引用,这将自动运行它,并将返回的内容传递给setTimeout()
或setInterval()
)。这是一个专业提示。啊!但是如果该函数使用args呢?您可以阅读setTimeout()
,这解释了区别(并建议不要使用eval'd code方法。setTimeout()
和setInterval()
-引用的函数不接受参数。但是如果您需要调用作为引用传递的函数和/或想要共享作用域,请根据需要使用或。谢谢。传递引用意味着什么?您解释得很好。当您创建像function test(){}这样的函数时
,它存储在内存中的某个地方。这意味着它就像一个上面有数字的盒子;这个内存盒子的数字可以用作一个引用,表示“调用此引用的内容”。当您调用setTimeout()
或setInterval()
时,当您传递字符串(“test()”)时,它将作为一个表达式进行评估,这是一个缓慢且可能存在问题的表达式。相反,只通过传递名称(而不是()
)给它一个函数引用,这将自动运行它,并将返回的内容传递给setTimeout()
或setInterval()
).这是一个专业提示。啊!但是如果该函数需要arg怎么办