javascript - 闭包问题,为什么参数 i 弹出的是object mouseevent ?
本文介绍了javascript - 闭包问题,为什么参数 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);
};
}
};
解决方案
非常感谢:@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 = 5
console.log(i);
</script>
这篇关于javascript - 闭包问题,为什么参数 i 弹出的是object mouseevent ?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文