@VladMokrousov

Почему переменная не перезаписывается?

Привет, для лучшего понимания вопроса перейдите, пожалуйста, сюда https://codepen.io/VladMokrousov/pen/abdNXXP?edito... и выполните следующие действия:
1.Нажмите на первую кнопку
2.Нажмите на вторую кнопку
3.Снова нажмите на первую кнопку
4.И еще раз на вторую
Теперь вы можете наблюдать в консоли 2 переменные, которые продолжают увеличиваться при нажатии второй кнопки и вообще существовать независимо друг от друга.
Собственно вопрос - какого черта так происходит? Почему переменная просто не перезаписывается?
  • Вопрос задан
  • 120 просмотров
Решения вопроса 2
dimovich85
@dimovich85 Куратор тега JavaScript
https://u-academy.net/
Второй обработчик видит а по замыканию. Когда кликаете второй раз по первой кнопке запускается новая функция, которая создает новую "а" и новый обработчик события, после второго клика по второй кнопке срабатывает два обработчика и в консоли видим и 10 и 15 сразу, потому что два обработчика срабатывают на второй кнопке и каждый видит свою а по замыканию.
Вместо этого просто объявите а без значения за пределами всех обработчиков и пусть они по замыканию видят всегда одну и ту же переменную.
Ответ написан
@dimoff66
Кратко о себе: Я есть
Потому что каждый раз при нажатии на первую кнопку добавляется listener. Он не перезаписывается. Соответственно при нажатии на вторую кнопку срабатывают все ранее подключенные нажатием на первую кнопку listener-ы. И поскольку переменная a объявлена внутри функции, то увеличиваются все a внутри всех ранее подключенных слушателей.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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