我有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/