目 录CONTENT

文章目录

js 闭包的理解

萧瑟
2023-03-01 / 0 评论 / 7 点赞 / 279 阅读 / 764 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-07-03,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1.概念

一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域

2.简单理解

闭包 = 内层函数 + 引用的外层函数变量
简单代码示例:

function outer(){ 
    let i = 1; // 被内层函数引用的变量 
    function fn(){ // 内层函数 
        console.log(i) 
    } 
    fn() 
}

通常会在一个函数把闭包的结构包裹起来,用来保护被私有化的变量

3.闭包一定有return吗

不一定,上边的例子就没有return

4.闭包一定会内存泄漏吗

不一定,因为上边的例子就说明了 没有return 也没有对闭包内部私有化变量进行引用

5.什么时候使用return呢

闭包外部对私有化变量进行使用的时候就需要用到return

function outer(){ 
    let i = 0; 
    let fn = function(){ 
        console.log(i ++) 
    } return fn 
}
const result = outer() 
result() // 0

6.闭包与普通函数的区别

1、普通函数

变量i可以被修改,无法实现私有化

let i = 0; 
let fn = function(){ 
    console.log(i++) 
} 
fn();   //0
fn();   // 1
i = 100; 
fn();   // 100

js1

2、闭包函数

变量 i 已经被私有化,不会被外部修改

function outer() {
    let i = 0;
    let fn = function () {
        console.log(i++)
    }
    return fn
}
const result = outer()
result()  // 0
result()  // 1
i = 100;
result()  // 2

js2

7.闭包为什么会出现内存泄漏

因为 count 以下边的为例
js3

  1. 第8行的result是一个全局常量,代码执行完毕不会被立即销毁
  2. result使用了outer函数
  3. outer函数用到了fn函数
  4. fn函数里面用到了 i
  5. i 被引用不会被回收,所以一直存在

扫码_搜索联合传播样式-标准色版

7

评论区