Eas*_*yBB 1 javascript function settimeout
var a = function(bool){
(function b(bool){
if(bool === true || bool === undefined){
console.log('running');
setTimeout(b,50);
}else{
clearTimeout(b);
}
})();
}
Run Code Online (Sandbox Code Playgroud)
我已经知道这可能比setInterval清除此功能更好.我已经尝试过休息和返回,并且它一直在循环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);
}
Run Code Online (Sandbox Code Playgroud)
clearTimeout(MDN)期望"timeoutID"而不是函数作为参数:
var id = setTimeout(b,50);
clearTimeout(id);
Run Code Online (Sandbox Code Playgroud)
但是,当我仔细查看您的代码时,似乎还有另一个问题:
setTimeout(b,50);
Run Code Online (Sandbox Code Playgroud)
你正在调用b没有任何参数,所以函数参数bool将永远是undefined!试试这个:
setTimeout(function () {
b(false);
},50);
Run Code Online (Sandbox Code Playgroud)
然后它应该只迭代一次.然后你根本不需要清除超时(你只是停止设置新的超时):
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);
}
})();
}
Run Code Online (Sandbox Code Playgroud)
现在你只需弄清楚你的中止条件是什么,并把它带到正确的地方.
编辑(回答你的评论)
看来你只需要一个启动间隔的函数和一个停止它的函数.所以接下来是这种设置的最小例子(也计算迭代次数).根据您自己的需要调整它应该相当容易.
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |