1 概念:
大白话:内部函数能访问外部函数作用域中的变量 (外部人能使用这个变量,但不能修改这个变量)
2 用途:
1 实现数据的私有
2 这些变量可以保存到内存中
3 应用场景
3-1 数据统计
3-2 银行排号
3-3 电商某个商品购买(共1000单,不能让全局变量污染)
3-4节流防抖
4 弊端
保存内存不被销毁,造成内存泄露。
5 闭包分歧地方:
、
5-1 闭包不一定有return,但一般使用时会有return 。
5-2 闭包本身是不会造成内存泄露,不使用就不会造成。
实例:
function a(){
/*
通过如下多次调用getA(),i会保存内存
保存到内存中---可以做防抖和节流
*/
let i = 0;
function add(){
i++;
return i;
}
return add;
}
let getA = a();
console.log(getA()) //1
console.log(getA()) //2
// 普通函数不会保存到内存(调用一次销毁一次)如下:
function b(){
let b = 20;
return b;
}
console.log(b()); //20
console.log(b()); //20
6 垃圾回收
6-1 概念+原理
6-2 垃圾回收方法:
6-2-1 引用计数:主要是针对IE做的处理,现在一般浏览器很少在使用这种方法。
定义变量obj 计数为0,当o,m 各引用了一次会变成2。 o 再次赋值其他变量,obj就会减少一次,当前m赋其他变量,obj 也会减少一次。这就是引用计数
引用计数带来问题:互相引用既循环调用--导致计数永远不为0(不释放),所以现在一般浏览器不在使用引用计数方法。