剖析原理:JS高级篇——闭包

闭包简介:

闭包:能够访问另一个函数作用域的变量的函数。
清晰的讲:闭包就是一个函数,这个函数能够访问其他函数的作用域中的变量。

闭包定义:

如果在一个内部函数里,对在外部作用域(但不是全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。

闭包作用:

  1. 可以在函数的外部访问到函数内部的局部变量。
  2. 让这些变量始终保存在内存中,不会随着函数的结束而自动销毁。

闭包应用:

  1. 实现公有变量。
  2. 可以做缓存(存储结构)。
  3. 可以实现封装,属性私有化。
  4. 模块化开发,防止污染全局变量。
闭包最简结构如下:
function outer() {
     var  a = '变量1'var  inner = function () {
            console.info(a)}
    return inner;    // inner 就是一个闭包函数,因为他能够访问到outer函数的作用域
}
var  inner = outer()// 获得inner闭包函数
inner()//"变量1"

解决闭包问题:

function test () {
				var arr = [];
				for (var i = 0; i < 10; i++) {
					// arr[i] = function() {
					// 	console.log(i); //此时会打印10个10
					// }

					(function  (j) {
						        arr[j] = function  () {
								console.log(j); //此时依次打印0-9
					}
					}(i)) //立即执行函数
				}
				return arr;
			}
			
			var myArr = test();
			console.log(myArr + "ww");
			for (var j= 0; j< 10; j++) {
				myArr[j]();
			}

1.注释的代码本来是for循环里面的多个function (){}被保存到外面,而只有函数才能被执行,function (){}只是一个声明,无法执行,所以里面的i进不到function (){}内部去,等到for循环结束的时候,即i=10的时候此时i才进入function (){}内部。
2.于是做个了修改,为了将function (){}变成函数,就用立即执行函数这个方法,然后用j来接收i的值,最后返回。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值