这是我的代码(在button.click()
函数内部)
if(inBreak === true) {
inBreak = false;
var timer = setInterval(function() {
if(seconds == 0) {
console.log(minutes);
minutes -= 1;
seconds = 59;
} else {
seconds -= 1;
}
$('.minutes').text(minutes);
$('.seconds').text(seconds);
}, 1000);
} else {
inBreak = true;
console.log(timer);
clearInterval(timer);
}
问题是clearInterval(timer)
不起作用,因为未定义计时器,但是我是在第一次单击(并使用该函数)时定义了它。
那么您有实现此目标的想法吗? 我试着用let / const代替var,但是无论如何还是不能工作:
答案 0 :(得分:4)
timer
是局部变量,在函数末尾被破坏。
将其存储在其他位置(例如,作为全局变量):
window.myTimer = setInterval(function() {
....
clearInterval(window.myTimer);
答案 1 :(得分:1)
我怀疑您是在timer
处理程序中声明了click
变量,因此在每个click
上,变量timer
被重置。
例如
function() { // event handler function
var timer;
if(inBreak === true) {
// code
timer = setInterval()
} else {
// code
console.log(timer);
}
}
您应该在事件处理程序范围之外创建一个变量,以便该变量可用并共享相同的引用。
例如
var timer; // <- Move the declaration outside the function scope to be available and share same reference.
function() { // event handler function
if(inBreak === true) {
// code
timer = setInterval()
} else {
// code
console.log(timer);
}
}