for循环中的Javascript变量范围

chr*_*mac 12 javascript

如何i在我的for循环中保持对变量的访问?我正在努力学习,而不仅仅是得到答案,所以一些解释会非常有帮助.谢谢!

var el, 
    len = statesPolyStrings.length;

for (var i = 0; i < len; i++) {
    el = document.getElementById(statesPolyStrings[i]);

    google.maps.event.addDomListener(el, 'mouseover', function() {
        $("#"+statesPolyStrings[i]).addClass("highlight");
        statesPolyObjects[i].setOptions({ strokeWeight: '2' });
    });
}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 29

您的所有回调都共享相同的i变量.
当事件处理程序实际运行时,i是在数组结束之后.

您需要将循环体包装在一个自动调用函数中,该函数i作为参数.
这样,每次迭代都将获得自己的,不变的i变量.

例如:

for (var i = 0; i < statesPolyStrings.length; i++) {
    (function(i) {
        ...
    })(i);
}
Run Code Online (Sandbox Code Playgroud)