博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript 在for循环中绑定事件
阅读量:4294 次
发布时间:2019-05-27

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

问题原因:

写了一段这样的代码

例1

for(var i=0;i<10;i++){    btns[i].οnclick=function(){        alert(i);    }}
原意是每个按钮按一下弹出一个弹框来显示它的标号。

结果每次都是显示最后一个按钮的标号。

找原因找原因!

解决方法:

后来在网上找到了这个

例2

for(var i=0;i<10;i++){   btns[i].οnclick=(function(i){       return function(){alert(i)}    })(i)}

这样一执行,果然就出现了预期的结果。

为什么?

例3

for(var i = 0; i < 2; i++){        btns[i].onclick = function (){            alert(i);            i = i + 1;        }    }

网上很多资料提到了闭包,然后说了好多东西来说明什么是闭包,有一个通俗的讲法是子函数中使用了父函数的私有变量。

第一种情况其实也是使用了闭包,只不过所有的子函数共用了父函数的一个私有变量,通过例3可以看出这一点,无论点击哪个按钮之后提示的数字都会自增一,而且两者的自增是连续的而不是独立的。

在第二个例子中,所有的子函数则是使用了父函数传入的参数,子函数的子函数则是使用了这个参数,由于参数传递对于数字来说是传值,所以每个子函数的参数则是全新的拷贝之后的数字对象。

转载地址:http://gvuws.baihongyu.com/

你可能感兴趣的文章
FFmpeg 的介绍与使用
查看>>
Android 虚拟机简单介绍——ART、Dalvik、启动流程分析
查看>>
原理性地理解 Java 泛型中的 extends、super 及 Kotlin 的协变、逆变
查看>>
FFmpeg 是如何实现多态的?
查看>>
FFmpeg 源码分析 - avcodec_send_packet 和 avcodec_receive_frame
查看>>
FFmpeg 新旧版本编码 API 的区别
查看>>
RecyclerView 源码深入解析——绘制流程、缓存机制、动画等
查看>>
Android 面试题整理总结(一)Java 基础
查看>>
Android 面试题整理总结(二)Java 集合
查看>>
学习笔记_vnpy实战培训day02
查看>>
学习笔记_vnpy实战培训day03
查看>>
VNPY- VnTrader基本使用
查看>>
VNPY - CTA策略模块策略开发
查看>>
VNPY - 事件引擎
查看>>
MongoDB基本语法和操作入门
查看>>
学习笔记_vnpy实战培训day04_作业
查看>>
OCO订单(委托)
查看>>
学习笔记_vnpy实战培训day05
查看>>
学习笔记_vnpy实战培训day06
查看>>
聚合搜索引擎
查看>>