闭包-个人知识记录

77 阅读1分钟

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