博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript 如何使用闭包
阅读量:5952 次
发布时间:2019-06-19

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

闭包基本上是内部函数可以访问其范围之外的变量,可用于实现隐私和创建函数工厂

定义一个数组,循环遍历这个数组并在延迟3秒后打印每个元素的索引

先看一个不正确的写法:

const arr = [10, 12, 15, 21];for (var i = 0; i < arr.length; i++) {  setTimeout(function() {    alert('The index of this number is: ' + i);    console.log('The index of this number is: ' + i);  }, 3000);}

看下执行效果

clipboard.png

如上图:3秒后每次都是打印4,而不是0123

原因:因为setTimeout函数创建的是一个可以访问其外部作用域的函数(闭包),该作用域包含索引i的循环。经过3秒后,i的值已经变为4

正确的写法:

写法一:

const arr = [10, 12, 15, 21];for (var i = 0; i < arr.length; i++) {  setTimeout(function(i_local){    return function () {      alert('The index of this number is: ' + i_local);      console.log('The index of this number is: ' + i_local);    }  }(i), 3000)}

clipboard.png

写法二:

const arr = [10, 12, 15, 21];for (let i = 0; i < arr.length; i++) {  setTimeout(function() {    alert('The index of this number is: ' + i);    console.log('The index of this number is: ' + i);  }, 3000);}

clipboard.png

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

你可能感兴趣的文章
Url.Action取消字符转义
查看>>
JQuery选择器大全
查看>>
Gamma阶段第三次scrum meeting
查看>>
python3之装饰器修复技术@wraps
查看>>
[考试]20150606
查看>>
Javascript_备忘录5
查看>>
Can’t create handler inside thread that has not called Looper.prepare()
查看>>
敏捷开发方法综述
查看>>
Hadoop数据操作系统YARN全解析
查看>>
修改数据库的兼容级别
查看>>
Windows下同时安装两个版本Jdk
查看>>
uoj#228. 基础数据结构练习题(线段树)
查看>>
JS键盘事件监听
查看>>
ios开发周期之--(向上,向下,四舍五入)取整
查看>>
加油!
查看>>
拦截导弹问题(动态规划)
查看>>
iOS 单元测试(Unit Test 和 UI Test)
查看>>
[linux小技巧]
查看>>
文件下载_中文乱码:"Content-disposition","attachment; filename=中文名
查看>>
HBase 笔记3
查看>>