//为每道门绑定事件
for (var i = 0, len = imgs.length; i < len; i++) {
//使用立即调用的函数表答式,为了获得不同的i值
(function(i) {
imgs[i].onmouseover = function() {
//先将每道门复位
setImgsPos();
//打开门
for (var j = 1; j <= i; j++) {
imgs[j].style.left = parseInt(imgs[j].style.left, 10) - translate + 'px';
}
};
})(i);
}
直接在for里面绑定不可以么??????
for (var i = 0, len = imgs.length; i < len; i++) {
imgs[i].onmouseover = function() {
//先将每道门复位
setImgsPos();
//打开门
for (var j = 1; j <= i; j++) {
imgs[j].style.left = parseInt(imgs[j].style.left, 10) - translate + 'px';
}
};闭包中的i和外面的循环i是二回事了,闭包中的i在此时已经是个参数,是个常量了,所以在绑定时生成的function中,不同的i,在注释打开门那段代码中i的值是不一样的,
而不用闭包,i就是变量了,所以生成绑定事件时,i一直在变,所有事件就会变成一样,要么就是JS报错,因为j随着i改变