setInterval 和 clearInterval 的正确方法

Proper way to setInterval and clearInterval

JS 的相对新手,试图围绕调度进行思考。此代码将开始附加但不会停止它。我很确定问题是 'clearInterval' 需要处理一个已分配了 'setInterval' 函数的变量。我似乎无法掌握的是如何正确表达。

var hmm = function appendStuff(){
    $("p").append("<b>Appended text</b>");
};
$("#start").click(function() {   
    console.log("startClicked");  // working... 
    window.setInterval(hmm, 1000) // working...
}); 
$("#stop").click(function() {   
    console.log("stopClicked");  // working...  
    window.clearInterval(hmm)
}); 

谢谢!

setInterval()函数returns一个ID。这就是您要分配给 hmm.

的内容

另外,setInterval()的第一个参数是你要在每个时间间隔调用的函数。

var hmm = null;
function appendStuff(){
    $("p").append("<b>Appended text</b>");
};
$("#start").click(function() {   
    console.log("startClicked");  // working... 
    hmm = window.setInterval(appendStuff, 1000) // working...
}); 
$("#stop").click(function() {   
    console.log("stopClicked");  // working...  
    window.clearInterval(hmm)
}); 

您需要将setInterval对象赋值给一个变量传给clearInterval,而不是将SetInterval的函数变量传给clearInterval。参考 here.

var hmm = function appendStuff(){
    $("p").append("<b>Appended text</b>");
};
var interval;
$("#start").click(function() {   
    console.log("startClicked");  // working... 
    interval = window.setInterval(hmm, 1000) // working...
}); 
$("#stop").click(function() {   
    console.log("stopClicked");  // working...  
    window.clearInterval(interval)
}); 

您可以使用 w3School here 中的这个 setInterval() 示例。基本上你使用的语法例如:

var yourIntervalVariable = setInterval(function(){
  // do something here..
}, 1000);

然后您可以像这样在变量上使用 clearInterval():

clearInterval(yourIntervalVariable);