Почему 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();
        
    }
}
Другие вопросы по тегам