博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript闭包演示
阅读量:5303 次
发布时间:2019-06-14

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

闭包演示

产品 0

产品 1

产品 2

产品 3

产品 4

以上场景是初学者经常碰到的。即获取HTML元素集合,循环给元素添加事件。在事件响应函数中(event handler)获取对应的索引。但每次获取的都是最后一次循环的索引。

原因是初学者并未理解JavaScript的闭包特性。通过element.οnclick=function(){alert(i);}方式给元素添加点击事件。响应函数function(){alert(i);}中的 i 并非每次循环时对应的 i(如0,1,2,3,4)而是循环后最后 i 的值5。 或者说循环时响应函数内并未能保存对应的值 i,而是最后一次i++的值5。

 

解决方案如下:

1、将变量 i 保存给在每个段落对象(p)上

function init1() {    var pAry = document.getElementsByTagName("p");     for( var i=0; i

 

2、将变量 i 保存在匿名函数自身

function init2() {  var pAry = document.getElementsByTagName("p");   for( var i=0; i

 

3、加一层闭包,i 以函数参数形式传递给内层函数

function init3() {  var pAry = document.getElementsByTagName("p");  for( var i=0; i

4、加一层闭包,i 以局部变量形式传递给内层函数

function init4() {  var pAry = document.getElementsByTagName("p");  for( var i=0; i

5、加一层闭包,返回一个函数作为响应事件(注意与3的细微区别)

function init5() {  var pAry = document.getElementsByTagName("p");  for( var i=0; i

 

6、用Function实现,实际上每产生一个函数实例就会产生一个闭包

function init6() {    var pAry = document.getElementsByTagName("p");    for( var i=0; i

7、用Function实现,注意与6的区别

function init7() {    var pAry = document.getElementsByTagName("p");    for( var i=0; i

转载于:https://www.cnblogs.com/besuccess/articles/3489361.html

你可能感兴趣的文章
ubuntu重装mysql
查看>>
JS 学习笔记
查看>>
Linux ag命令
查看>>
Keepalived
查看>>
js实现瀑布流布局
查看>>
C. Anagram codeforces
查看>>
找工作 做一些关于面试的笔记
查看>>
English trip -- VC(情景课)1 C What's your name?(review)
查看>>
redirect的错误用法asp.net怎么使用自定义错误
查看>>
在MyEclipse下统计工程的代码(package、行数、类个数)
查看>>
Erlcron分析学习
查看>>
idea 快捷键
查看>>
SimpleDateFormate的使用
查看>>
菜鸟运维笔记:Windows上用Xshell管理你的云主机
查看>>
JavaScript中的this
查看>>
Activity生命周期
查看>>
jsp
查看>>
OpenNI / NITE的Stable版更新
查看>>
03 基本数据结构 - 栈
查看>>
Hyper-V虚拟机上安装一个图形界面的Linux系统
查看>>