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

列表下划过的代码中,为什么只能用this不能用Lis[i]?

for (var i = 0; i < Lis.length; i++) {
		Lis[i].onmouseover = function(){
			this.style.background = '#567';
		}
		Lis[i].onmouseout = function(){
			this.style.background = '#fff';
		}
		Lis[i].onclick = function(e){
			var  id = this.id;
			e= e || window.event;
			if(e.stopPropagation){
				e.stopPropagation();
			}else{
				e.cancelBubble=true;
			}
			stateList.style.display = 'none';
			stateTxt.innerHTML=getByClass('stateSelect_text',id)[0].innerHTML;
			loginStateShow.className = "login-state-show "+id;
		}
	}

上面那段

Lis[i].onmouseover = function(){
this.style.background = '#567';
}

我想改成Li[i].style.background = '#567'为什么就不能实现经过选项更换颜色?而非要使用this呢?this不是指向Lis[i]吗?        

正在回答

3 回答

list[i]指向的是所有经过遍历的li,并不是你鼠标经过的这一个,你要找到当前的这一个,就必须传值,而this是已经封装好的,指向当前你鼠标指向的这一个。

2 回复 有任何疑惑可以回复我~
#1

weibo_一万群什麼_0 提问者

非常感谢!
2016-07-18 回复 有任何疑惑可以回复我~

在这个函数里面的i其实引用的是最后一次i的值,因为for循环时,你并没有执行点击函数,当执行这个函数的时候,for循环已经完毕,它发现它自己没有这个变量i,于是向它的上级作用域查找这个变量i,也就是储存在作用域链里面的最后一个i值

2 回复 有任何疑惑可以回复我~
#1

weibo_一万群什麼_0 提问者

可以说得再具体一点吗谢谢,有点理解不了.
2016-07-01 回复 有任何疑惑可以回复我~

是可以使用Lis[i]的,可能是书写错误。

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

z阿汀

我尝试了一下,写成Lis[i]也是可以实现操作的。
2016-07-14 回复 有任何疑惑可以回复我~
#2

福尔摩斯易 回复 z阿汀

肯定是没法的啊。有闭包的影响
2017-03-14 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

列表下划过的代码中,为什么只能用this不能用Lis[i]?

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