什么是闭包最简短的话解释 内部函数引用外部的变量 使用闭包 // 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): 函数柯里化