1.闭包是什么?
有权访问另一个函数作用域中变量的函数——《JavaScript高级程设计》
2.定义与使用
function fn1() {
var num = 10;
function fn2() {
console.log(num);
}
fn2();
}
fn1(); // fn1就是闭包
使用vscode调试工具可以看到当代码运行到console.log(num)时fn1函数形成闭包
3.作用
- 延伸变量作用域范围,读取函数内部的变量
- 让这些变量的值始终保持在内存中
4.应用
- 函数防抖
- 函数节流
- 变量持久化(闭包中的变量不会被回收)
5.缺点
- 容易造成内存泄漏
5.1解决方案
- 手动释放
var fn =function(){
var sum = 0
return function(){
sum++
console.log(sum);
}
}
fn1=fn()
fn1() //1
fn1() //2
fn1() //3
fn1 = null // fn1的引用fn被手动释放了
fn1=fn() //num再次归零
fn1() //1