为了账号安全,请及时绑定邮箱和手机立即绑定

为每道门绑定事件,为什么要使用闭包形式

//为每道门绑定事件
	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';
				}
			};


正在回答

1 回答

闭包中的i和外面的循环i是二回事了,闭包中的i在此时已经是个参数,是个常量了,所以在绑定时生成的function中,不同的i,在注释打开门那段代码中i的值是不一样的,

而不用闭包,i就是变量了,所以生成绑定事件时,i一直在变,所有事件就会变成一样,要么就是JS报错,因为j随着i改变

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为每道门绑定事件,为什么要使用闭包形式

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信