Hyubert
@Hyubert
JS

Scope JS. Почему так?

Почему 1 вариант работает , а второй нет? Должно же бить наоборот

var timeout, 
    counter = 0;

var updateCounter = function() {
  
    $('.counter').text(counter++);
    timeout = setTimeout(updateCounter, 1000);
   }

updateCounter();


var updateCounter = function() {
var timeout, 
    counter = 0;
  
    $('.counter').text(counter++);
    timeout = setTimeout(updateCounter, 1000);
   }

updateCounter();
  • Вопрос задан
  • 137 просмотров
Решения вопроса 3
Потому что counter обнуляете каждый раз.
Ответ написан
Комментировать
alsopub
@alsopub
Во втором случае переменные timeout и counter создаются при каждом вызове функции updateCounter() и уничтожаются по ее завершению.
В первом случае - они глобальные (относительно функции) и создаются один раз.
Ответ написан
Комментировать
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Во втором варианте вы при каждом вызове функции updateCounter внутри неё переменную counter приравниваете нулю. Разумеется, это неправильно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы