JavaScript 如何使用闭包
栏目: JavaScript · 发布时间: 7年前
内容简介:闭包基本上是内部函数可以访问其范围之外的变量,可用于实现隐私和创建函数工厂如上图:
闭包基本上是内部函数可以访问其范围之外的变量,可用于实现隐私和创建函数工厂
定义一个数组,循环遍历这个数组并在延迟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 ,而不是 0 , 1 , 2 , 3 。
原因:因为 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);
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Node.js开发实战
[美] Jim R. Wilson / 梅晴光、杜万智、陈琳、纪清华、段鹏飞 / 华中科技大学出版社 / 2018-11-10 / 99.90元
2018年美国亚马逊书店排名第一的Node.js开发教程。 . Node.js是基于Chrome V8引擎的JavaScript运行环境,它采用事件驱动、非阻塞式I/O模型,具有轻量、高效的特点。Node.j s 工作在前端代码与 数据存储层之间,能够提高web应用的工作效率和 响应速度。本书以最新版Node.js 8为基础,从实际案例出发 讲解Node.js的核心工作原理和实用开发技......一起来看看 《Node.js开发实战》 这本书的介绍吧!