Столкнулся с проблемой при работе с обработчиками событий в JavaScript. Пытаюсь получить доступ к объекту внутри функции-обработчика клика, но результат не соответствует ожиданиям.
В твоем случае проблема в том, что замыкание захватывает ссылку на переменную item, а не ее значение. К моменту клика цикл уже завершился, и item указывает на последний элемент.
Есть несколько способов это исправить. Самый простой - использовать let вместо var в цикле:
for (let i = 0; i < items.length; i++) {
let item = items[i];
document.querySelector(`#${item.code}`).onclick = function() {
console.log(`Элемент: ${this.id}`);
console.log(`Код: ${item.code}`);
};
}
Так для каждой итерации создается новая переменная item, и замыкание будет работать как надо.
хей, я тоже сталкивался с подобной проблемой! дело в замыканиях - переменная item в цикле будет ссылаться на последний элемент массива ко времени вызова обработчика. чтобы пофиксить, можно использовать IIFE (немедленно вызываемую функцию):