我莫名其妙地无法停止我的setTimeout()循环

时间:2017-10-01 23:49:22

标签: javascript function settimeout cleartimeout

所以我有一个主要function,每隔2-17秒触发另一个function,但当我尝试用clearTimeout()停止它时,它会继续并完全忽略{{1} }}。

所以这是我的主要职能:

clearTimeout()

这是我的停止超时功能:

var itemTimer;
var stopTimeout;

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

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

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

不要将括号传递给参数,也不要将参数包装在引号中。

而不是:

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

您正在寻找:

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

希望这有帮助! :)

答案 1 :(得分:1)

我认为你的超时正在累积。一旦major被调用一次,变量itemTimerstopTimeout就会被重新分配一个新的超时引用。因此,无法清除之前设置的超时。如果是这种情况,它应该是一个简单的解决方案。只需将stopTimer作为major中的第一个声明:

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