Javascript 如何退出超时函数的实例?

Javascript 如何退出超时函数的实例?,javascript,jquery,Javascript,Jquery,假设您想创建一个带有setTimeout的java函数,以便它每5秒重复一次。这个定时函数只是更新一些数据。当用户单击打开覆盖的按钮时,调用就会发生,并且只要覆盖打开,函数就会继续运行。一旦覆盖关闭,放弃更新设置为true,并在计时器功能中进行检查。但是,如果用户在超时完成之前打开覆盖,它将添加超时函数的另一个实例 如何避免这种情况 (顺便说一句,计时器在JSFIDLE或bin上似乎不起作用。。但是,相同的代码在我的服务器上起作用。) var放弃更新=true; 函数计时器(){ 如果(!放弃

假设您想创建一个带有setTimeout的java函数,以便它每5秒重复一次。这个定时函数只是更新一些数据。当用户单击打开覆盖的按钮时,调用就会发生,并且只要覆盖打开,函数就会继续运行。一旦覆盖关闭,放弃更新设置为true,并在计时器功能中进行检查。但是,如果用户在超时完成之前打开覆盖,它将添加超时函数的另一个实例

如何避免这种情况

(顺便说一句,计时器在JSFIDLE或bin上似乎不起作用。。但是,相同的代码在我的服务器上起作用。)

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怎么办