我有3个.a和一个函数,当它被.a -ed时,它应该提醒数字[0、1或2] mouseover所属:

​function a(){
    for(var c=0; c<3; c++){
        alert(c);
        $('.a:eq('+c+')').mouseover(function(){alert(c)});
    }

}


当我执行它时,第一个alert(c)会被触发3次,并且消息分别为“ 0”,“ 1”,“ 2”,这与预期的一样。

但是,当mouseover .a时,无论它是哪个.a,它都会警告“ 3”。

http://jsfiddle.net/f6tQn/

如果有人可以解释为什么会发生这种情况并提供解决方案,我将不胜感激。

最佳答案

发生这种情况是因为您的每个mouseover函数都使用相同的c值,该值在循环完成后即为3

您需要结束每次迭代以“捕获” c的值。

function a(){
    for(var c=0; c<3; c++){
        alert(c);
        var func = function(c){
            return function(){ // closes around the current value of "c"
                alert(c);
            };
        };
        $('.a:eq('+c+')').mouseover(func(c));
    }
}


演示:http://jsfiddle.net/vDbu3/

关于javascript - JavaScript:For循环问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10691315/

10-12 03:12