-------------------------------------------------闭包 解释与举例--------------------------------------------------------------
闭包:利用作用域的嵌套,将原本的局部变量,进化成自由(私有)变量的环境 是一种环境 不是一种写法 想办法生成闭包环境
(重要又不重要的沙雕面试题 实际很少直接使用)
闭包的原理:
局部作用域,局部变量的生命周期,变量的朝生暮死
利用作用域的嵌套,触发计算机的垃圾回收机制(作用域结束 清除局部变量 )
将原本要删除的变量,在彻底删除之前 暂时保存起来,可以继续使用
<!-- 垃圾回收机制:将要删除的数据,先暂时存放在一个临时空间内,不立即删除,如果需要再次使用,可以直接找到该数据,继续使用,直到真正不用了,再被删除 -->
闭包的简单应用
外部重复操作 函数内的变量只允许产生局部作用域 无法进行a的累加
function fn(){
var a = 10;
a++;
console.log(a)
}
fn();
fn();
闭包不产生全局变量 且累加a
function fn(){
var a = 10;
function fun(){
a++;
console.log(a)
}
return fun;
}
//https://blog.youkuaiyun.com/hpasdabc?spm=1000.2115.3001.5343
var f = fn(); //先执行一次 申明a 且拿到return 保存到f
f(); // 重复执行里面的函数
f();
闭包的特点:
可以将要删除的数据,保存起来,继续使用,方便
可以在函数外部操作内部的数据
缺点
因为要删除的数据,没有被删除,继续存起来,那么占内存,耗性能
在外部有可能改变内部的数据
闭包就是将作用域内部和外部连接起来的桥梁