Задать вопрос
@Faha1998
Full stack

Замыкая Javascript, как решить?

Всем привет, не могу решить как заставить это работать(тема замыкания в цикле)
for(i=0;i<10;i++){
			editBtn[i].addEventListener("click", function() {
				console.log(names[i]);				
			});
		}

1) в цикле задаю всем кнопкам(они в массиве) функцию что сработает при клике
2) при задаче функции я хочу выводить имя из names того номера что и кнопка т.е. i = i, но при клике на любую из кнопок в консоле я вижу names[9], т.е. последний i.

Помогите решить и понять эту задачу, буду так же очень рад увидеть годный материал по замыканиям.
  • Вопрос задан
  • 203 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Ответ написан
Комментировать
teknik2008
@teknik2008
Расскажите про GOLANG. Мне интересно
Замыкание
for (var i = 0; i < 10; i++) {
	(function(i){
		editBtn[i].addEventListener("click", function () {
			console.log(names[i]);
		});
	})(i)
}
Если es2015 то
for (let i = 0; i < 10; i++) {
	editBtn[i].addEventListener("click", function () {
		console.log(names[i]);
	});
}

Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mlnkv
@mlnkv
JavaScript Developer
for (var i = 0; i < 10; i++) {
  (function(i) {
    editBtn[i].addEventListener("click", function() {
      console.log(names[i]);        
    });
  })(i);  
}
/* или */
[].map.call(editBtn, function(btn, i) {
  btn.addEventListener("click", function() {
    console.log(names[i]);
  });
});
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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