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

定义一个数组,循环遍历这个数组并在延迟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);
}

看下执行效果

如上图: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)
}

写法二:

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);
}

JavaScript 如何使用闭包相关推荐

  1. 让你分分钟学会Javascript中的闭包

    Javascript中的闭包 前面的话: 闭包,是 javascript 中重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,你很难从定义去理解它 ...

  2. 深入理解javascript原型和闭包(16)——完结

    之前一共用15篇文章,把javascript的原型和闭包. 首先,javascript本来就"不容易学".不是说它有多难,而是学习它的人,往往都是在学会了其他语言之后,又学java ...

  3. 深入理解javascript原型和闭包(17)——补this

    本文对<深入理解javascript原型和闭包(10)--this>一篇进行补充,原文链接:http://www.cnblogs.com/wangfupeng1988/p/3988422. ...

  4. 深入理解javascript原型和闭包(3)——prototype原型

    既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的新朋友,我估计您也是javascript的新朋友. 在咱们的第一节(深入理解 ...

  5. [译]Javascript中的闭包(closures)

    本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...

  6. 【进阶2-3期】JavaScript深入之闭包面试题解

    (关注福利,关注本公众号回复[资料]领取优质前端视频,包括Vue.React.Node源码和实战.面试指导) 本周正式开始前端进阶的第二期,本周的主题是作用域闭包,今天是第8天. 本计划一共28期,每 ...

  7. 【javascript笔记】关于javascript中的闭包

    最开始看<javascript高级程序设计>的时候就看到了javascript中的闭包,在第七章第二节....好大概知道了,过了段时间,好了又忘了... 我们来看这本书里面关于闭包是怎么描 ...

  8. 解析面试常问题之JavaScript中的闭包概念及应用,顺便普及一下大家口中常说的内存泄漏问题

    JavaScript中的闭包是一个面试中经常被考到的问题,大家可能都对这个概念多多少少都有一些模糊的概念或者一点都不了解,那么今天就来给大家讲解一下. 公众号:前端印象 不定时有送书活动,记得关注~ ...

  9. 一篇文章把你带入到JavaScript中的闭包与高级函数

    在JavaScript中,函数是一等公民.JavaScript是一门面向对象的编程语言,但是同时也有很多函数式编程的特性,如Lambda表达式,闭包,高阶函数等,函数式编程时一种编程范式. funct ...

  10. Web前端Lec7-2 - Javascript作用域与闭包

    Lecture7-2 Javascript作用域与闭包 文章目录 Lecture7-2 Javascript作用域与闭包 7.4 JavaScript 作用域 7.5 JavaScript 变量 7. ...

最新文章

  1. 2022-2028年中国出行O2O市场深度调研及投资前景预测报告
  2. PHP Webservice的发布与调用
  3. java 快排非递归_C++ 中快排的递归和非递归实现
  4. linux3.4.2移植总结(s3c2440)
  5. android 自定义menu背景,Android编程实现自定义系统菜单背景的方法
  6. Excel 使用VBA 使表格的值被修改后填充颜色标注
  7. Spring Boot整合Swagger3的分组问题
  8. B/S还是C/S? ERP技术的新方向(转)
  9. Photoshop CS6 破解
  10. css如何实现自动换行,CSS实现自动换行的方法
  11. 基于stm32f401的双按键可视化多模式选择模块
  12. 微信域名防封的新知识
  13. aspose.words复制插入同一word文档中的某个页面
  14. 【每日一句】名人金句学英语(20221130)
  15. php 睡眠,win10睡眠是什么意思
  16. Nature:学术造假者瑟瑟发抖,论文图像查重AI技术重拳出击
  17. 读写文件时缓冲区多大好呢?我来告诉大家哈
  18. SoftMax函数,交叉熵损失函数与熵,对数似然函数
  19. 【soft6星评论】站在5G时代的入口,我们看到了“智慧交通”的含苞待放
  20. Qlik Sense 的一些问题【已解决】

热门文章

  1. java base64 压缩_在线等(急)Base64(带压缩)出问题
  2. php访问获取全部网站状态码,php打开其他网站获取状态码
  3. 网络编程大小端的注意事项
  4. 如何正确使用as follows 与 following
  5. mysql中增加45天三小时_MySQL查询以45天为间隔添加天数并在新列中显示输出
  6. 【 FPGA/IC 】常考加法器总结
  7. 【 MATLAB 】ndgrid 和 meshgrid 对比理解以及应用
  8. 获取远程数据本地缓存到PHP数组
  9. strut2配合json返回数据json对象
  10. 自定义Quartz超实用工具类