0

Здравствуйте, не получается разобраться как работает JS.Я это вижу так,после цикла есть 1 глобальная переменная и на ней отрабатывает addEventListener,разве после того как отработала функция,локальная переменная не затирается?

'use strict';

var buttons = document.querySelectorAll('button');

var addClickListener = function(button) { button.addEventListener('click', function(evt) { console.log(button.value); }); }

for (var i = 0; i < buttons.length; i++) { var button = buttons[i]; addClickListener(button); }

<html>

<head>
  <meta charset="utf-8">
  <title></title>
  <script src="https://zeckson.github.io/demo-console/2.2.1/index-silent.min.js"></script>
</head>

<body>
  <button value='Я первый!'>Первая кнопка</button>
  <button value='Я второй!'>Вторая кнопка</button>

</body>

</html>
  • А где она должна затиратся? – Евгений Иванов Sep 09 '17 at 17:26
  • у вас функция обработчик клика замыкается в функции addClickListener в которую вы каждый раз передаете свое значение и создается свой контекст для каждой итерации цикла – Rostyslav Kuzmovych Sep 09 '17 at 17:28
  • Затирается тут var button = buttons[i];Вот и получается,что обработчик для одной переменной. – Александр Sep 09 '17 at 18:34
  • Еще и вопрос пометили как дубликат...Ну понял я,что для каждой функции свой дубликат..непонятно почему обработчик срабатывает,когда функции уже отработали и осталась одна переменная – Александр Sep 09 '17 at 18:41

0 Answers0