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

闭包问题,为什么参数 i 弹出的是object mouseevent ?

闭包问题,为什么参数 i 弹出的是object mouseevent ?

小怪兽爱吃肉 2018-09-13 13:13:25
为什么function(i)参数 i 弹出的是object mouseevent ?它不是一个i参数吗? for (var i = 0; i < 5; i++) {      abc(i);      function abc(i){          sumintputs[i].onclick = function(i){              alert(i);          };      }  };
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

非常感谢:@AlanZhang1973 指出错别字和代码格式错误,手机回答完就不能修改了。

for (var i = 0; i < 5; i++) {
    abc(i);    function abc(i){
        sumintputs[i].onclick = function(){
            alert(i);
        };
    }
};

这样才会输出i。

onclick是定义了函数,有系统调用,第一个传入的参数是 event。系统最终调用的是onclick(event),所以你的i不是你定义的变量的i。

for (var i = 0; i < 5; i++) {
    abc(i);
    function abc(i){
        sumintputs[i].onclick = function(event){
            alert(event);
        };
    }
};

最新更新(2016-8-28),和评论区中的 all2005 交流,写了一个完美的demo,应该能彻底讲明白这个问题了。

<li>000</li><li>111</li><li>222</li><li>333</li><li>444</li><script>
    //写外边也一样,更方便理解function abc(i){    //i 的作用域已经被限制在 abc 函数内了
    document.getElementsByTagName('li')[i].onclick = function(event){        //i继承 abc的作用域
        console.log("单击" + i);
    }
}for (var i = 0; i < document.getElementsByTagName('li').length; i++) {
    abc(i);    document.getElementsByTagName('li')[i].ondblclick = function(event){        //i就是 for后边的i,无论双击那个都是 5
        console.log("双击" + i);
    }
};//这里 i = 5console.log(i);</script>


查看完整回答
反对 回复 2018-10-03
  • 1 回答
  • 0 关注
  • 1708 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信