博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript闭包使用:解决循环绑定事件问题
阅读量:7142 次
发布时间:2019-06-28

本文共 953 字,大约阅读时间需要 3 分钟。

hot3.png

    在使用js给标签批量绑定事件时,一般使用循环动态的绑定,但是绑定事件时,一般会引用一个匿名函数,在匿名函数中使用循环出来的变量,如:

    


var div = document.getElementsByClassName("img");var mask = document.getElementsByClassName("mask");for(var i=0;i

上面代码中,绑定onmouseover和onmouseout事件的时候,都使用匿名函数,而匿名函数内也都使用到了for循环的变量值i,执行代码后,只有最后那个div成功的绑定了事件。

这是因为内部函数在使用外部变量时使用引用的方式而不是复制,就是说我给每个节点设置onmouseover和onmouseout事件的时候将i的引用传递给了mask数组,当我点击节点触发onmouseover和onmouseout事件的时候,i的值已经变成了节点总数。。。

解决办法是使用闭包:

    


var div = document.getElementsByClassName("img");var mask = document.getElementsByClassName("mask");for(var i=0;i

  修改后之所以正确是因为此时传进去的是i的值的复制,不会因为外部函数改变而改变。

  问题的关键是:子函数需要使用父函数中的局部变量

  解决的办法就是使用闭包!

转载于:https://my.oschina.net/hehongbo/blog/350810

你可能感兴趣的文章
孤儿进程与僵尸进程【比较】
查看>>
4、您为这个网络适配器输入的IP地址 x.x.x.x已经分配给另一个适配器
查看>>
windows将环回口ip设置子网掩码全为255(LVS中Windows作为真实主机(RealServer)时的设置方法)...
查看>>
android:minSdkVersion 版本 标示
查看>>
python模块 时间
查看>>
查询EBS 11i 用户名密码
查看>>
shell脚本创建文件
查看>>
9个杀手级 JVM 编程语言
查看>>
Exchange Server 2013 系列三:部署规划
查看>>
用IP地址添加网络打印机
查看>>
ActiveMQ与RabbitMQ使用camel集成
查看>>
A主机让B主机做它的web服务器
查看>>
shell脚本中if判断,if判断条件
查看>>
RabbitMQ安装方法总结如下:
查看>>
如何查看dd的拷贝进度
查看>>
我的友情链接
查看>>
项目管理软件achiveo
查看>>
参考资料--超链接
查看>>
Flume结合Spark测试
查看>>
初学RenderMonkey做一面旗帜飘动的效果
查看>>