我不知何故无法停止我的 setTimeout() 循环

I somehow can't stop my setTimeout() loop

所以我有一个主要的 function 每 2 - 17 秒触发另一个 function 但是当我试图用 clearTimeout() 停止它时它会继续并完全忽略 clearTimeout()

所以这是我的主要功能:

var itemTimer;
var stopTimeout;

function major (){
    var itemTime = Math.floor(Math.random() * 15000) + 2000;
    itemTimer = setTimeout('items()', itemTime);    
    stopTimeout = setTimeout('major()',itemTime);
}

这是我的停止超时函数:

function stopTimer() {
    clearTimeout(itemTimer);
    clearTimeout(stopTimeout);
}

感谢您的帮助

您的 setTimeout() 调用有误;您正在调用 items()major()。相反,您需要将它们作为要调用的函数传递。

不要将括号传递给参数,也不要将参数用引号引起来。

而不是:

itemTimer = setTimeout('items()', itemTime);    
stopTimeout = setTimeout('major()',itemTime);

您正在寻找:

itemTimer = setTimeout(items, itemTime);
stopTimeout = setTimeout(major, itemTime);

希望对您有所帮助! :)

我认为您的超时时间越来越长。一旦 major 被调用一次,变量 itemTimerstopTimeout 就会重新分配一个新的超时引用。因此将无法清除先前设置的超时。如果是这种情况,它应该很容易修复。只需调用 stopTimer 作为 major 中的第一个语句:

function major (){
    stopTimer();
    var itemTime = Math.floor(Math.random() * 15000) + 2000;
    itemTimer = setTimeout('items()', itemTime);    
    stopTimeout = setTimeout('major()',itemTime);
}