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

请问一下,为啥不能用as[i],能解释的详细一点么,比较笨╰( 0ω0)ノ

window.onload= function () {
   var box=document.getElementById('divselect'),
       menu=box.getElementsByTagName('ul')[0];
       as=box.getElementsByTagName('a');
       title=box.getElementsByTagName('cite')[0],
       lis=box.getElementsByTagName('li');

   //点击三角
   box.onclick= function () {
       menu.style.display = "block";
   };
   //遍历as
   for (var i=0,l=as.length;l>i;i++) {
        as[i].onmouseover= function () {
            as[i].style.background = "#456";    这里为啥不能用as[i],非要用this,一直想不明白,请解释的详细一点,比较笨谢谢大神
       };
   }

};

正在回答

2 回答

这就好比双色球摇奖的时候先出来的六个球,出来一个被人拿走一个,等六个球都拿完了你再想用只能去用第七个了。实际上这是js的垃圾回收机制在作怪,事件发生后变量使用完毕在内存里立马就会被销毁,所以不会有剩下的,而使用this指代当前对象,你鼠标经过的是哪个它对应的就是哪个

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

芈麗蘺 提问者

很好,谢谢这么详细的讲解了,大概也懂了
2017-06-01 回复 有任何疑惑可以回复我~

原理就是用as[i]具体的执行结果就是每个  as[i].onmouseover后面的代码都不会被执行,只是输出 function () {
            as[i].style.background = "#456" 这个函数语句,因为这个function构成了一个闭包。

如果想要按照 as[i]这种写法的可以 写成 for (var i=0,l=as.length;l>i;i++) {
        as[i].onmouseover=(function () {
            as[i].style.background = "#456")();  这样后面的代码会立即的执行。

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

举报

0/150
提交
取消

请问一下,为啥不能用as[i],能解释的详细一点么,比较笨╰( 0ω0)ノ

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