Как использовать замыкания для создания прослушивателей событий в цикле Javascript for?

HTML

<span class="char" id="0">?</span>
<span class="char" id="1">!</span>
<span class="char" id="2">"</span>
<span class="char" id="3">/</span>
<span class="char" id="4">%</span>
<span class="char" id="5">
<span class="char" id="0">?</span>
<span class="char" id="1">!</span>
<span class="char" id="2">"</span>
<span class="char" id="3">/</span>
<span class="char" id="4">%</span>
<span class="char" id="5">$</span>
...
lt;/span> ...

JavaScript

var charElems = document.getElementsByClassName('char');

for (var i=0; i < charElems.length; i++) {

    charElems[i].addEventListener('mouseover',function() {

        (function(j) {mouseoverCheck(j);}(i));

    });

}

У меня есть куча (сотни)span элементы с номерами в качестве идентификаторов (начиная с 0 и увеличивая на 1). Предполагается, что этот цикл должен создавать прослушиватели событий mouseover для всехspan элементы (которые все имеют классchar). После того, как муссированный, он должен извинитьmouseoverCheck() функционировать и передавать в любомi был когда этот слушатель события был создан. Таким образом, слушатель 203-го события должен передать203, Но это не так. Прямо сейчас, это проходит в то, что я считаю, является последним значениемi был до завершения цикла.

Я пытался использовать IIFE и закрытие, чтобы убедиться, что каждый слушатель события получилiЗначение в момент его создания, а не значение при вызове функции. Очевидно, я не сделал это правильно, но я уверен, что закрытие является ключом к моей проблеме. Может кто-нибудь пролить свет на то, как это сделать правильно? Я думал, что понял закрытие, но ясно, что я не ...

Ответы на вопрос(2)

Ваш ответ на вопрос