闭包
-
概念,生成一个非全句不会被销毁的内存空间
-
保护变量的私有性,不被外界因素污染,还可以延申变量的作用域
let a =0 //计数函数 function add(){ console.log(++a) } add()add()add()add() // 1 2 3 4
-
我们可以直接对a 进行修改 并且会对函数add的结果造成影响,所以我们 可以直接将a 定义在函数内部 但每次调用addd() 都会重新声明定义a 结果就不会变
//计数函数 function add(){ let a =0 console.log(++a) } add()add()add()add() // 1 1 1 1
-
我们可以在函数内部在定义一个函数来使用a,在把函数return出去,当我们调用add() 方法 就可以接收到fn函数,就可以调用它l(),这个时候我们直接对a 进行修改 就不会影响到程序的执行结果(变量的私有性)。同时变量的作用域延申到了全局,由于全局变量l,是add函数的一个内部函数,同时这个函数使用了它父类的变量a,所以由垃圾回收机制,a就不会被回收,造成内存泄漏,就形成了闭包,
function add(){ let a =0 function fn(){ console.log(++a) } return fn } a = 100 //不会影响 add方法的a为私有变量 不能直接访问 let l = add() l() l() l() l() //1234
-
简单来说,就是外部访问了内部变量,同时也延申了内部变量的作用域,导致内部变量没有被销毁,会消耗内存。多了会造成内存溢出,有性能问题
-
正确使用闭包可以实现数据的持久化
-