javaScript中onclick函数循环事件时闭包的影响
来源:互联网 发布:php增删改查源码下载 编辑:程序博客网 时间:2024/06/01 10:11
for (var i=0;i<aa.length;i++) { aa[i].onclick = (function (i) { return function () { alert(aa[i].innerHTML); } })(i); }}
首先:
1、JS函数传参是传值不传址的。
2、onclick的值应该给一个函数声明,事件触发时只会传一个event参数给声明的函数。
如果在循环中使用aa[i].onclick = function() { alert(aa[i].innerHTML); };
i 不是这个匿名函数的参数,是传址进去的,当onclick事件触发的时候循环已经结束了,i 已经是最后一个值了。因此,当网页解析完成后,直接就会出现警示框,并不需要触发点击事件。
如果声明 function(i) { alert(i); }
那这个 i 就指代了 event,这时候事件触发的时候只会弹出触发的事件名。
而使用aa[i].onclick = (function(i) { return function() { alert(aa[i].innerHTML); } })(i);
这里是执行外层的匿名函数,返回内层的这个匿名函数传给onclick。
这里注意外层函数是立即执行的,带一个参数,是我们传给它的,而不是事件触发器。
内层函数是不带参数的,事件执行时触发器会传给它一个event值。
对循环中的每一个 i 都会生成一个匿名函数,i 作为生成的匿名函数的参数,是传值的。
相当于循环中当 i = 2 的时候,生成了这样一个函数:function() { alert(aa[2].innerHTML); }; 赋值给了aa[2].onclick,即aa[2].onclick = function() { alert(aa[2].innerHTML); };
这才是我们想要的。
这种手法跟下面的方法是等价的,而下面并没有用闭包。
var al = function(param) {
return function() {
alert(param);
}
}
循环中aa[i].onlick = al(i);
0 0
- javaScript中onclick函数循环事件时闭包的影响
- JavaScript的onclick函数
- Javascript中button按钮的onclick()事件传递参数
- javascript 按钮onclick事件中 函数1成功执行函数2写法
- javascript:触发DOM的onclick事件
- 【JavaScript】onclick事件汇总
- JavaScript中处理事件之单击事件onClick
- javascript 动态改变onclick事件触发函数代码
- js循环添加onclick事件
- 用javascript改变onclick调用的函数
- javascript中事件循环机制
- js关于循环中onclick绑定带参数的函数问题
- javascript中函数的循环调用
- android中onClick事件的实现
- JS中onclick事件的一个坑
- js循环添加onClick事件--js的闭包
- javascript中onclick,click()的区别
- javascript中click和onclick的区别
- 栈的压入、弹出序列的判断
- C# 连接SQL Server数据库的几种方式--server+data source等方式
- 雷区计算(算法)
- 诛仙锁设计思想路
- 关于socket长连接的心跳包
- javaScript中onclick函数循环事件时闭包的影响
- 438. Find All Anagrams in a String
- 杭电 1001
- .net各个版本多线程的进化
- 图片剪裁之图形圆形和方形选择框
- Source Insight 3.X 插件支持utf8
- 之前写的一个桌面聊天软件的项目总结
- leetcode-Next Greater Element II
- React Native navigator关闭侧滑手势