JS
闭包
-
闭包的应用:
- 实现数据的私有
-
内存泄漏
- 内存泄漏指任何对象在您不再拥有或需要它之后仍然存在
-
闭包=内层函数+引用的外层函数变量
const outer=()=>{ const a = 1 const f=()=>{ console.log(a) } f() } outer() 通常会再使用一个函数包裹住闭包结构,以起到对变量保护作用
-
外部如果想要使用闭包的变量,则需要return
function count(){ let i = 0 function fn(){ i++ console.log(`'函数被调用了${i}次'`) } return fn } const fun = count() fun() i=100 //从外部修改i无法修改,因为i是函数私有的
-
内存泄漏
以下代码谁存在内存泄漏?count变量
- result是一个全局变量,代码执行完毕不会立即销毁
- result使用fn函数
- fn用到fun函数
- fun函数里面用到count
- count被引用就不会被回收,所以一直存在
此时,闭包引起内存泄漏
function fn(){ let count = 0 function fun(){ count++ console.log(`'函数被调用了${count}次'`) } return fun } const result = fn() result() result() result()