什么是闭包最简短的话解释
内部函数引用外部的变量
使用闭包
// function fn1() {
// var a = 20;
// function fn2() {
// a++;
// console.log("a",a);
// }
// fn2()
// }
// fn1() // 21 永远是21
// 内部函数被外部引用,内部的闭包才不会消亡,需要设置 fn =null
function fn1() {
var a = 20;
return function fn2() { // 返回一个函数,能够被外界所引用
a++;
console.log("a",a);
}
}
let fn3 = fn1()
fn3() // 每次调用都会被累加,
闭包总结
闭包:利用内部函数引用外部函数变量,不论你return 还是不return
利用闭包,为了让闭包内的变量持久存在,同时也不至于提升全局变量,需要利用内部函数被外部所引用时,不销毁闭包内变量的特性
大多是利用闭包的操作将内部的函数暴露出去,供外部使用
闭包的特点
保存变量持久化,生命周期延长
保护变量,不会照成全局污染
方便代码的复用
造成内存泄漏,不会被垃圾回收机制回收
跨作用域访问
闭包的使用场景
(1): 防抖和节流
(2): 设计模式的单例模式
(3): for循环保留i的操作
(4): 函数柯里化