JavaScript闭包的个人理解(图文)

闭包,是一个精准又难懂的计算机词汇。官方给出的解释是:函数与对其状态即词法环境(lexical environment)的引用共同构成闭包(closure)。听起来十分晦涩难懂,那么,本文用通俗的语言对JS中的闭包进行解释。
要理解闭包,首先要理解函数在计算机中的存在形式。函数存在两个阶段,分别是定义阶段和调用阶段。在函数的定义阶段,计算机先要开辟一块函数存储空间用来放函数主题(这个空间的函数主体只是以一串字符串的形式存在),然后把这个存储空间的地址赋值给函数名。而执行阶段呢,就是在执行的时候,根据函数名的地址找到那块函数存储空间,再次开辟一个函数执行空间,在这个空间中执行4步:
1,在函数执行空间内部进行形参赋值
2,在执行空间内进行预解析
3,把存储空间的函数体复制到执行空间执行
4,销毁这个执行空间
下面给图片解释

function fn(){
	var a = 100;
	console.log(a)
}
fn()

函数的两个阶段
这两个就是定义函数执行函数时候,计算机干的事情。那么,怎么能让这个执行空间不被销毁呢?
一个不被销毁的的函数执行空间必须满足两点要求
1,定义的函数里面要返回一个复杂数据类型;
2,在函数外面必须要有变量接收这个被返回是复杂数据类型;
例如:

function a(){
	var num = 200;
	return function b(){
		console.log(num)
	}
}
var res = a()

再来谈到闭包,那么闭包又要满足什么条件呢?就是定义一个函数A的时候,直接或间接返回另一个函数B,函数B中使用着A的私有数据,同时在函数外面要有变量接收这个被返回的函数B,那么就形成了一个闭包空间,上面的代码就是一个闭包空间。
闭包
那么,闭包有什么用呢或者说闭包的特点呢?
1,闭包可以延长变量的声明周期,由于执行空间不会销毁那么变量就会一直存在;
2,可以在函数外部访问内部的数据;
3,可以保护私有变量,函数内部的变量不能再外部访问;

另外,闭包使用时也要有注意事项
由于闭包中执行空间不会被销毁,使得函数内部的变量也会一直存在,就会消耗内存,可能会导致内存的泄露问题。

以上就是本人对闭包的理解啦,如果有什么错误的地方还希望提出来,一起学习进步~

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值