当前位置: 首页 > article >正文

闭包的理解

什么是闭包

在函数内层的作用域中访问函数外层的作用域中的变量,就形成了一个闭包,闭包会使其私有变量的生命周期得到提升至与外层作用域一致。

闭包特性:

1.拥有私有变量

2. 延长私有变量的生命周期

一般函数中的变量在函数被执行完成之后就会直接销毁,但是闭包中的变量由于通过返回闭包函数被外部作用域所接收引用,使得其生命周期继承至与外部作用域的生命周期 一致,即使其上下文环境已被销毁。

const closures = () => {
    let a = 0;
    return function fn() {
        a++
        return a;
    }
}

使用场景

柯里化函数:避免频繁调用具有相同参数的函数,也能够提高复用性

// 假设我们有一个求长方形面积的函数
function getArea(width, height) {
    return width * height
}
// 如果我们碰到的长方形的宽老是10
const area1 = getArea(10, 20)
const area2 = getArea(10, 30)
const area3 = getArea(10, 40)
//使用柯里化函数
export const getArea = (width) => {
    return (height) => {
        return width * height
    }
}

// 先定义宽度为10
const getWidthOfArea = getArea(10)
// 对于宽度为10的长方形,直接写入高度即可
getWidthOfArea(20);
getWidthOfArea(30)

模拟私有方法

var Counter = (function() {
  var privateCounter = 0;
  function changeBy(val) {
    privateCounter += val;
  }
  return {
    increment: function() {
      changeBy(1);
    },
    decrement: function() {
      changeBy(-1);
    },
    value: function() {
      return privateCounter;
    }
  }
})();

计时器

回调函数

内存泄漏问题

当闭包函数被return出去并执行被外部变量所接收时,闭包中所访问的私有变量会造成内存泄漏问题

借助垃圾回收机制的标记清除法可以看出:

1.result是一个全局变量,代码执行完后不会立即销毁

2.result使用了fn函数

3.fn函数使用了fun函数

4.fun函数中使用了count变量

5.count变量被引用了所以不会被回收


http://www.kler.cn/a/458946.html

相关文章:

  • SQL-leetcode-197. 上升的温度
  • 常见的 Redis 面试题
  • Angular Firebase CRUD 项目推荐
  • 经验证:将数据从索尼传输到Android的 4 种方法
  • ubuntu进行C++的调试
  • YOLOv9-0.1部分代码阅读笔记-train.py
  • 协程原理 函数栈 有栈协程
  • SpringCloudAlibaba 技术栈—Sentinel
  • union的实际使用
  • html+css网页设计 美食 美食4个页面
  • HTML——13.超链接
  • 纯血鸿蒙ArkUI选项卡布局详解
  • 【Spring Boot 实现 PDF 导出】
  • win10、win11-鼠标右键还原、暂停更新
  • Docker运行hello-world镜像失败或超时:Unable to find image ‘hello-world:latest‘ locally Trying to pull reposi
  • Hbase的特点、特性
  • 【Vue】深入理解v-model指令-父子组件数据绑定
  • AI生成视频字幕--VideoCaptioner/卡卡字幕助手
  • 【Java】深入了解 Java 中的 split() 方法
  • 什么是Spring Boot 应用开发?
  • VuePress搭建个人博客
  • 根据 business_group的值在 Django 管理员界面中显示不同字段
  • 智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之7 附件(文档)
  • 项目基本配置
  • Xshell日志录制
  • Java:190 基于SSM的药品管理系统