重置函数中的setInterval,作用域是全局的

resetting setInterval in a function, scope is global..?

本文关键字:作用域 全局 setInterval 函数      更新时间:2023-09-26

问题:当我在函数中声明clearInterval()/setInterval()或clearTimeout()/setTimeout()时,它什么也不做。我必须重置它的原因是用户可以点击重置计时器。

我尝试过的:我想要一个函数每3秒执行一次(因此为什么我使用setInterval()与setTimeout()),并在点击时重置计时器。我试过使用setTimeout()有它的clearartimeout () &setTimeout()在每次函数执行结束时调用。结果:执行一次。

下面的代码与setInterval相同。结果:循环,从不重置。

// Declare variables as global
var varTimerSpeed = 3000;
var varTimerInterval;
varTimerInterval = setInterval("someFunction()", varTimerSpeed);
function someFunction() {
  // Reset timer
  clearInterval(varTimerInterval);
  varTimerInterval = setInterval("someFunction()", varTimerSpeed);
}
// Call the function
$(".class").live("click",function() { someFunction(); });

我在someFunction()中有其他事情正确执行,所以我知道click的处理程序正在工作

如果您希望someFunction以间隔运行,但在单击.class元素时将其清除并复位,则不要清除someFunction内部的间隔。

只需在click处理程序中清除并重新启动它。

var varTimerSpeed = 3000;
var varTimerInterval = setInterval(someFunction, varTimerSpeed);
function someFunction() {
  console.log( "someFunction" );
}
$(".class").live("click",function() { 
    clearInterval( varTimerInterval );
    varTimerInterval = setInterval(someFunction, varTimerSpeed);
});

这个稍微修改的jsFiddle似乎工作得很好:http://jsfiddle.net/jfriend00/GgQBu/.

// Declare variables as global
var varTimerSpeed = 3000;
var varTimerInterval = setInterval(someFunction, varTimerSpeed);
function someFunction() {
    // Reset timer
    $("#output").append("...");
    clearInterval(varTimerInterval);
    varTimerInterval = setInterval(someFunction, varTimerSpeed);
}
// Call the function
$(".class").live("click", someFunction);