Ingernirated
@Ingernirated
Романыч

Как настроить JS clearInterval?

Подскажите, пожалуйста, почему clearInterval не срабатывает(если можно, то с углублением в суть js) и как это исправить?
var zero = 0;
function go() {
zero++;
document.write(zero);

if (zero == 10) {
clearInterval(go);
}
}
setInterval(go, 1000);
  • Вопрос задан
  • 1178 просмотров
Решения вопроса 2
twobomb
@twobomb
Лучше не используй setInterval если будет слишком маленький интервал допустим 10мс и вызов большой функции то она не успеет закончить работу,но setInterval вызовет ее обратно, снова и снова и возможно тупо зависание. Как вариант использовать setTimeout, вот переделанный твой пример
var zero = 0;
go();
function go() {
   zero++;
   document.write(zero);
   if (zero < 10)
     setTimeout(go,1000);
}
Ответ написан
@ShinShil
Суть js. В js часто функции используются как параметры. Например, функция вызывающая две функции:

function someFunc(argFunc1, argFunc2) {
     argFunc1();
     argFunc2();
     return 5; //эта функция возвращает число 5
}

func1() {
    console.log("FUNC 1");
}


func2() {
    console.log("FUNC 2");
}

Console.log(someFunc(func1, func2));


Теперь посмотрим на setInterval(func, time). Здесь func - функция, time - время в мс. setInterval создаёт отдельный поток, который каждые time мс запускает на выполнение функцию func. Именно указатель этого потока возвращает функция setInterval.

Поток с функцией не связан, он только запускает её на выполнение, поэтому Ваш код: clearInterval(go); не имеет смысла. Нужно остановить поток, а не функцию.

var intervaID = setInterval(go, 1000); //в intervalID помещаем ID исполняющего потока
var z = 0;
function go() {
    if(z == 10) {
        clearInterval(intervalID); // останавливаем исполняющий поток
    }else {
        ++z;
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
alsopub
@alsopub
var zero = 0;
var i;
function go() {
zero++;
document.write(zero);

if (zero == 10) {
clearInterval(i);
}
}
i = setInterval(go, 1000);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы