关于闭包的一些见解

闭包的意义:在不污染全局环境的前提下,使一个变量能够复用。

如何实现闭包
      分三步,第一步把冰箱打开,第二步把大象装进去,第三步关上冰箱-------没有,开个玩笑。
1,外层函数嵌套内层函数
2,内层函数使用外层函数的局部变量
3,把内层函数作为外层函数的返回值
代码示例如下

function xx() {
	var a = 1;
	return function yy(n) {
		a += n
		console.log(a)
		return a
	}
}
xx()(2) // 3

闭包的原理:
      在函数调用后,本来是会释放掉局部变量的。但是内层函数使用了某个局部变量的话,那个变量将不能被释放。
      要理解闭包的原理,首先要知道函数在创建时会创建两个对象,一个是函数对象本身,另一个是作用域链对象,然后函数调用时,又会生成一个活动对象。
      作用域链对象的指针指向了一个栈,这个栈存放着这个函数外层的活动对象,比如上面的代码中,yy函数的作用域栈中,window对象在最下面,然后是xx的活动对象,yy调用后生成的活动对象在栈的最上面。
接着来看一张图——》
在这里插入图片描述
此时,内层函数yy的作用域链里面就包含了xx的活动对象,然后xx的活动对象又指向了xx,然后xx又在全局调用了,挂在了全局环境上,然后yy也调用了,这样一来xx,yy,yy的作用域链就形成了一个铁三角,yy和xx都不能被释放了,所以局部变量a就可以复用了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值