Почему clearInterval не работает с функцией
Это код
var t = ()=>{
setInterval(()=>{
console.log('hello')
},1000)
}
t();
clearInterval(t)
Почему clearinterval не блокирует выполнение setInterval?
4 ответа
Он не работает с функцией, потому что именно так и был разработан механизм. Звонки в setInterval()
вернуть номер, который действует как идентификатор для таймера, который устанавливает вызов. Это число, которое должно быть передано clearInterval()
,
Это не приводит к ошибке, чтобы передать что-то, что не является числом, или передать число, которое не идентифицирует активный таймер, но вызов не имеет никакого эффекта.
В вашем случае ваш t()
функция может просто вернуть результат setInterval()
позвоните, и ваш внешний код может сохранить его для использования позже, как вам нравится.
Это потому, что вам нужно вернуть идентификатор интервала и очистить этот идентификатор.
Согласно документации:
setInterval возвращает идентификатор интервала, который однозначно идентифицирует интервал, поэтому вы можете удалить его позже, вызвав clearInterval().
//function that keeps logging 'hello' on the console
var t = ()=>{
//return the id of the interval
return setInterval(()=>{
console.log('hello')
},1000)
}
//get the id of the interval created by the "t" function
var id = t();
//alerts the id just to see it
alert(id);
//clear it - function will stop executing
clearInterval(id);
Рекомендации
https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval
Потому что вы должны очистить Interval по ссылке для setInterval().
var interval = setInterval();
clearInterval(interval);
T не равно возвращаемому значению setInterval, так как вы не возвращаете значение из функции стрелки и не присваиваете его значению.
Попробуйте этот фрагмент вместо:
var t = ()=>
setInterval(()=>{
console.log('hello')
},1000)
var interval = t();
clearInterval(interval);
let intervalId = null;
cycle(true);
function cycle(r) {
let myInterval = () => {
return setInterval(() => plusSlides(1), 1000);
}
if (!r) {
clearInterval(intervalId);
} else {
intervalId = myInterval();
}
}