如何清除Interval?
How to clearInterval?
[编辑:非常感谢大家的帮助。我看到这个问题被一些人标记了,因为它没有显示足够的研究等。抱歉,感谢您的耐心等待!我是编码和 Whosebug 的新手 -- 还不确定规则或礼仪。]
为什么在第一个 'DONE' 之后没有停止?有什么简单的解决办法吗?
function countdown(num) {
let n = num;
function dec() {
if (n > 1) {
n--;
console.log(n);
} else {
clearInterval(dec);
console.log('DONE!');
}
}
setInterval(dec, 1000);
}
感谢您的宝贵意见!
clearInterval 需要 setInterval returns.
的间隔 id
function countdown(num) {
let n = num, id;
function dec() {
if (n > 1) {
n--;
console.log(n);
} else {
clearInterval(id);
console.log('DONE!');
}
}
id = setInterval(dec, 1000);
}
countdown(5)
您必须存储对计时器中 return 值的引用(用于标识它),然后使用该引用稍后清除计时器。您正试图将回调函数作为引用传递给清除。
有关详细信息,请参阅 the documentation。
function countdown(num) {
let timer = null; // <-- This will store the timer id
let n = num;
function dec() {
if (n > 1) {
n--;
console.log(n);
} else {
clearInterval(timer); // <-- Pass the ID to cancel
console.log('DONE!');
}
}
timer = setInterval(dec, 1000); // <-- Capture the return value
}
countdown(5);
请试试这个:
function countdown(num) {
let n = num;
function dec() {
if (n > 1) {
n--;
console.log(n);
} else {
clearIntervalABC();
console.log('DONE!');
}
}
function clearIntervalABC() {
clearInterval(inter);
}
const inter = setInterval(dec, 1000);
}
您需要清除计时器,而不是函数
function countdown(num) {
let n = num;
function dec() {
if (n > 1) {
n--;
console.log(n);
} else {
clearInterval(a);
console.log('DONE!');
}
}
const a = setInterval(dec, 1000);
}
countdown(1)
为了扩展其他人的好答案,以下代码也以更紧凑的方式实现了这一点:
let countdown = num => {
let interval = setInterval(() => {
if (num <= 1) {
clearInterval(interval);
console.log('DONE');
} else {
num--;
console.log(num);
}
}, 1000);
}
countdown(5);
[编辑:非常感谢大家的帮助。我看到这个问题被一些人标记了,因为它没有显示足够的研究等。抱歉,感谢您的耐心等待!我是编码和 Whosebug 的新手 -- 还不确定规则或礼仪。]
为什么在第一个 'DONE' 之后没有停止?有什么简单的解决办法吗?
function countdown(num) {
let n = num;
function dec() {
if (n > 1) {
n--;
console.log(n);
} else {
clearInterval(dec);
console.log('DONE!');
}
}
setInterval(dec, 1000);
}
感谢您的宝贵意见!
clearInterval 需要 setInterval returns.
的间隔 idfunction countdown(num) {
let n = num, id;
function dec() {
if (n > 1) {
n--;
console.log(n);
} else {
clearInterval(id);
console.log('DONE!');
}
}
id = setInterval(dec, 1000);
}
countdown(5)
您必须存储对计时器中 return 值的引用(用于标识它),然后使用该引用稍后清除计时器。您正试图将回调函数作为引用传递给清除。
有关详细信息,请参阅 the documentation。
function countdown(num) {
let timer = null; // <-- This will store the timer id
let n = num;
function dec() {
if (n > 1) {
n--;
console.log(n);
} else {
clearInterval(timer); // <-- Pass the ID to cancel
console.log('DONE!');
}
}
timer = setInterval(dec, 1000); // <-- Capture the return value
}
countdown(5);
请试试这个:
function countdown(num) {
let n = num;
function dec() {
if (n > 1) {
n--;
console.log(n);
} else {
clearIntervalABC();
console.log('DONE!');
}
}
function clearIntervalABC() {
clearInterval(inter);
}
const inter = setInterval(dec, 1000);
}
您需要清除计时器,而不是函数
function countdown(num) {
let n = num;
function dec() {
if (n > 1) {
n--;
console.log(n);
} else {
clearInterval(a);
console.log('DONE!');
}
}
const a = setInterval(dec, 1000);
}
countdown(1)
为了扩展其他人的好答案,以下代码也以更紧凑的方式实现了这一点:
let countdown = num => {
let interval = setInterval(() => {
if (num <= 1) {
clearInterval(interval);
console.log('DONE');
} else {
num--;
console.log(num);
}
}, 1000);
}
countdown(5);