我正在尝试做类似的事情:
我只想在选项卡加载类时调用 doSomething() 函数(可能需要 3 或 5 秒)。
function addInfosSinistre(msg){
addInfosSinistreRecursive(msg, 0);
}
function addInfosSinistreRecursive(msg, nbCalls) {
if ($("#tab").hasClass('loaded')) {
doSomething();
}else if (nbCalls < 10) {
setTimeout(addInfosSinistreRecursive(msg, nbCalls+1),500);
}
}
这不起作用,计时器似乎不起作用。这里有什么问题吗?
最佳答案
您实际上要做的是执行函数addInfosSinistreRecursive
并将返回值传递给setTimeout()
。您真正想要做的是传递函数引用。
这样做的一种方法是为变量创建一个闭包,如下所示:
function addInfosSinistreRecursive(msg, nbCalls) {
function timeoutHandler(){
if ($("#tab").hasClass('loaded') ) {
doSomething();
}else if (nbCalls < 10) {
nbCalls += 1;
setTimeout( timeoutHandler, 500 );
}
}
// first execution
timeoutHandler();
}
函数timeoutHandler()
可以引用addInfosSinistreRecursive()
的参数,并且没有自己的参数。因此,您可以将对它的引用传递给 setTimeout()
。
关于javascript - setTimeout 和带参数的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25889950/