gpt4 book ai didi

javascript - 清除立即调用的函数中的 setTimeout

转载 作者:行者123 更新时间:2023-11-30 08:46:57 25 4
gpt4 key购买 nike

 var a = function(bool){
(function b(bool){
if(bool === true || bool === undefined){
console.log('running');
setTimeout(b,50);
}else{
clearTimeout(b);
}
})();
}

我了解到这应该比 setInterval 更好,但清除此功能不起作用。我试过 break 和 return,它一直循环遍历 console.log

关于如何轻松取消此功能有什么建议吗?

我尝试过的

        if(bool === true || bool === undefined){
console.log('running');
setTimeout(b,50);
}else{
return;
}

var d;
if(bool === true || bool === undefined){
console.log('running');
d=setTimeout(b,50);
}else{
clearTimeout(d);
}

最佳答案

clearTimeout ( MDN ) 需要“timeoutID”而不是函数作为参数:

var id = setTimeout(b,50);
clearTimeout(id);

但是当我仔细查看你的代码时,似乎还有另一个问题:

setTimeout(b,50);

您正在调用不带任何参数的b,因此函数参数bool 将始终为undefined!试试这个:

setTimeout(function () {
b(false);
},50);

那么它应该只迭代一次。然后你根本不需要清除超时(你只是停止设置新的超时):

var a = function(bool){
(function b(bool){
if(bool === true || bool === undefined){
console.log('running');
setTimeout(function () {
var goOn = false; //<--- abort condition here
b(goOn);
},50);
}
})();
}

现在您只需弄清楚您的中止条件是什么,然后将其放入正确的位置即可。

编辑(回答您的评论)

您似乎只想要一个启动间隔的函数和一个停止间隔的函数。因此,接下来是此类设置的最小示例(也包括迭代计数)。根据您自己的需要调整它应该相当容易。

var goOn = false,
counter = 0;

function run() {
counter++;
if (goOn) {
setTimeout(run, 50);
}
}

function start() {
counter = 0;
goOn = true;
run();
}

function stop() {
goOn = false;
console.log(counter);
}

关于javascript - 清除立即调用的函数中的 setTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21182059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com