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

请问以下代码中,为什么我把循环当中的this改为as[i]就没有效果了啊,按理说应该是一样的道理啊

// 滑过滑过、离开、点击每个选项时

      // 执行脚本

    for(var i=0;i<as.length;i++){

        as[i].onmouseover=function(){

            this.style.background='#456';

        }

        as[i].onmouseout=function(){

            this.style.background='#fff';

        }

        

    }


正在回答

3 回答

你把代码改成这样

as[i].onmouseover=function(){
    this.style.background='#456';
    alert(i);
}

看看弹出的i是不是循环里一直增长的值就知道为什么了,如果非要用as[i],可以试下这么写

(function(i){
    as[i].onmouseover=function(){
        as[i].style.background='#456';
    }
}(i));


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

糖果罐 提问者

为什么弹出的i是啊5啊
2015-12-27 回复 有任何疑惑可以回复我~
#2

糖果罐 提问者

也不明白下面那种写法是什么写法啊
2015-12-27 回复 有任何疑惑可以回复我~
#3

李晓健 回复 糖果罐 提问者

就是闭包,你可以找一下相关资料了解了一下
2015-12-27 回复 有任何疑惑可以回复我~
#4

糖果罐 提问者 回复 李晓健

好,我去查一查
2015-12-27 回复 有任何疑惑可以回复我~
#5

糖果罐 提问者 回复 李晓健

恩,大概明白一点了,以为闭包,只能取到最外层循环的最后一个值,用一个匿名函数可以解决
2015-12-27 回复 有任何疑惑可以回复我~
#6

糖果罐 提问者

非常感谢!
2015-12-31 回复 有任何疑惑可以回复我~
查看3条回复

是这样的,你只是使用循环对a这个序列添加事件,所以当你点击的时候a的任意一个元素的时候,每个元素的事件早就添加完了。也就是说这时候的事件处理函数中的i等于序列的长度-1,而不会等于你点击那个元素在序列中的索引号。

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

你百度下“闭包问题”就明白了

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

糖果罐 提问者

好,我去查查
2015-12-27 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请问以下代码中,为什么我把循环当中的this改为as[i]就没有效果了啊,按理说应该是一样的道理啊

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