博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
闭包问题
阅读量:5094 次
发布时间:2019-06-13

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

经典闭包

for(var i = 0; i < 5; i++){    oLi[i].onclick = function(){        console.log("You clicked element # " + i);             // 输出全为5    }}

1.使用立即执行函数表达式

for(var i = 0; i < 5; i++){    (function(i){        oLi[i].onclick = function(){            console.log("You clicked element # " + i);        }    })(i)}

 

2.使用立即执行函数表达式(IIFE)再创建一个闭包

for(var i = 0; i < 5; i++){    oLi[i].onclick = (function(i){        return function() {            console.log('You clicked element #' + i);        }    })(i)}

3.将变量 i 保存给在每个段落对象 li 上

for(var i = 0; i < 5; i++){    oLi[i].index = i;    oLi[i].onclick = function(){        console.log("You clicked element # " + this.index);    }}

4.for循环的闭包(加一层闭包,i以局部变量形式传递给内存函数)

for(var i = 0; i < 5; i++){    (function(){        var item = i;        oLi[i].onclick = function(){            console.log("You clicked element # " + item);        }    }())}

5.ES6 中的let

for(let i = 0; i < 5; i++){    oLi[i].onclick = function(){        console.log("You clicked element # " + i);    }}

 

5.使用立即执行函数表达式(IIFE)再创建一个闭包

var nodes = document.getElementsByTagName('button');for (var i = 0; i < nodes.length; i++) {   nodes[i].addEventListener('click', (function(i) {      return function() {         console.log('You clicked element #' + i);      }   })(i));}

 

6.另一个解决方案不使用IIFE,而是将函数移到循环的外面

function handlerWrapper(i) {   return function() {      console.log('You clicked element #' + i);   }} var nodes = document.getElementsByTagName('button');for (var i = 0; i < nodes.length; i++) {   nodes[i].addEventListener('click', handlerWrapper(i));}

 

转载于:https://www.cnblogs.com/alantao/p/6508613.html

你可能感兴趣的文章
C语言面试题(一)--------华为
查看>>
利用python解析地址经纬度和利用经纬度定位地址
查看>>
Linux下VMware在更新完内核无法启动
查看>>
希腊字母
查看>>
rust
查看>>
H3C S5000和H3C S5500,俺来罗
查看>>
EXTJS之DATA PROXY READER
查看>>
python-day18-初识面向对象
查看>>
SQLHelper
查看>>
吴昊品游戏核心算法 Round 17 —— 吴昊教你玩拼图游戏 序
查看>>
Python学习笔记——基础篇【第五周】——random & time & datetime模块
查看>>
linux SSH 汇总
查看>>
CCNA第三讲笔记
查看>>
JSR303校验
查看>>
上传文件
查看>>
System V 信号量使用相关函数
查看>>
让android程序根据重力感应旋转屏幕(支持4个方向旋转)
查看>>
我所热衷的编程生涯 连载(8)
查看>>
心动女生的筛选
查看>>
解决哈希(HASH)冲突的主要方法
查看>>