js闭包

什么是闭包?
广义
所有的函数都是闭包
狭义
函数套函数
内部函数访问外部函数的变量
在这里插入图片描述
闭包(Closure)
大白话不怎么严谨的说法就是三点:
1.一个依赖于自由变量的函数
2.处在含有这些自由变量的一个外围环境
3.这个函数能够访问外围环境里的自由变量
下面数学图,便于理解
在这里插入图片描述
闭包:函数+词法环境

var a=1
var b=function(){
    return a+1 
}
b() // => 2, //这个案例中,变量a是一个依赖闭包机制所捕获的自由变量,也因此函数b可以被正常执行。

就是一种允许函数向关联的父级作用域寻址的访问特权。
closure就是把函数以及其所依赖的所有外部自由变量保存在一起的结合体。
深刻理解闭包就是一个拥有了环境绑定了许多变量的表达式。
核心:闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。

消除闭包
主动把外部引用赋为null或者页面关闭,javascript垃圾收集器才会释放相应的内存。

function outerF() {
var a = 1;
function innerF() {
return a++;
}
return innerF;
}
var t = outerF();
t = null;

闭包的好处:
1、将函数像快递员传松快递一样,让外界可以访问它和修改它;
2、将部分函数内部局部变量暴露,按需求共享和长期保存
闭包的坏处:
1、由于闭包占用内存空间,所以谨慎使闭包;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值