猿问

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

为什么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);
         };
     }
 };


小怪兽爱吃肉
浏览 1709回答 1
1回答

UYOU

非常感谢:@AlanZhang1973 指出错别字和代码格式错误,手机回答完就不能修改了。for&nbsp;(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;5;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;abc(i);&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;abc(i){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sumintputs[i].onclick&nbsp;=&nbsp;function(){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(i); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;} };这样才会输出i。onclick是定义了函数,有系统调用,第一个传入的参数是 event。系统最终调用的是onclick(event),所以你的i不是你定义的变量的i。for&nbsp;(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;5;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;abc(i); &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;abc(i){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sumintputs[i].onclick&nbsp;=&nbsp;function(event){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(event); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;} };最新更新(2016-8-28),和评论区中的 all2005 交流,写了一个完美的demo,应该能彻底讲明白这个问题了。<li>000</li><li>111</li><li>222</li><li>333</li><li>444</li><script> &nbsp;&nbsp;&nbsp;&nbsp;//写外边也一样,更方便理解function&nbsp;abc(i){&nbsp;&nbsp;&nbsp;&nbsp;//i&nbsp;的作用域已经被限制在&nbsp;abc&nbsp;函数内了 &nbsp;&nbsp;&nbsp;&nbsp;document.getElementsByTagName('li')[i].onclick&nbsp;=&nbsp;function(event){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//i继承&nbsp;abc的作用域 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log("单击"&nbsp;+&nbsp;i); &nbsp;&nbsp;&nbsp;&nbsp;} }for&nbsp;(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;document.getElementsByTagName('li').length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;abc(i);&nbsp;&nbsp;&nbsp;&nbsp;document.getElementsByTagName('li')[i].ondblclick&nbsp;=&nbsp;function(event){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//i就是&nbsp;for后边的i,无论双击那个都是&nbsp;5 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log("双击"&nbsp;+&nbsp;i); &nbsp;&nbsp;&nbsp;&nbsp;} };//这里&nbsp;i&nbsp;=&nbsp;5console.log(i);</script>
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答