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

力扣 30 天 JavaScript 挑战 第二题笔记

这道题是

在这里插入图片描述

涉及知识–闭包

1. 闭包定义以及相关知识点

官方定义为:在 JavaScript 中,函数具有对在相同作用域以及任何外部作用域中声明的所有变量的引用。这些作用域被称为函数的 词法环境。函数与其环境的组合被称为 闭包。
简单理解:内层函数+引用的外层函数变量。下图的a变量以及f函数就构成了闭包。
在这里插入图片描述

但是这样外部(这个外部是相对于outer而不是f)不可以使用闭包里面的变量,此时需要return。

function outer(){let a = 1function f(){return a;}f()
}
const result = outer()

这样通过返回闭包里的函数,外部可以访问到a的值,实现了变量的私有化(在outer函数的外部不可以修改a的值,只能访问a的值)。
但是这样同样造成了内存泄露,因为一般来说函数执行完毕后,会立刻被回收,但是现在讲f赋值给了一个全局变量,不会被回收,造成了内存泄露。

2. 闭包vs类

上述函数类的写法为

class outer {constructor() {this.a = 1;}add() {return this.a;}
}
const result = new outer()
  • 闭包和类的共同点
    都允许你定义或者传入一个私有数据,并且提供一个函数使用私有数据。
  • 闭包的优势 封装
    类里面可以通过 result.a=3来修改私有变量,但是闭包不可以。
  • 类的优势 节省内存
    类的方法存在“公共仓库”(原型对象)里,所有实例来借用。闭包每次造一个新实例,就重新拷贝一份方法。

答案

理解了闭包就很简单了

/*** @param {number} n* @return {Function} counter*/
var createCounter = function (n) {return function () {return n++};
};/** * const counter = createCounter(10)* counter() // 10* counter() // 11* counter() // 12*/
http://www.xdnf.cn/news/17449.html

相关文章:

  • 【RH134知识点问答题】第 3 章:分析和存储日志
  • 永磁同步电机无速度算法--零速启动非线性磁链观测器
  • QT第二讲-信号和槽
  • 企业WEB服务器nginx新手超详细讲解
  • 机器学习DBSCAN密度聚类
  • 【线程池】压测确定线程池合适的参数
  • 华为实验:DHCP 典型配置
  • 深入理解Qt事件处理机制
  • 新手向:Python开发简易待办事项应用
  • Linux 中CentOS Stream 8 - yum -y update 异常报错问题
  • [每周一更]-(第155期):深入Go反射机制:架构师视角下的动态力量与工程智慧
  • Spring Boot自定义Starter:从原理到实战全解析
  • GM3568JHF:FPGA+ARM异构开发板环境搭建教程
  • 免费PDF编辑软件 pdf24-creator 及其安装包
  • C语言(10)——结构体、联合体、枚举
  • 【Vapor Mode】Vue 从“运行时“优化转向“编译时“优化的范式跃迁
  • Java基础-TCP通信单服务器接受多客户端
  • Linux运维新手的修炼手扎之第27天
  • 1.2.3 迅猛发展期(2020年至今)
  • 从免费到盈利:Coze智能体1小时封装变现全流程指南——井云科技
  • SQL基本
  • PAT 1052 Linked List Sorting
  • 观远BI 工具驱动零售消费行业精益增长的实践路径
  • 【线性代数】线性方程组与矩阵——(1)线性方程组与矩阵初步
  • 海康威视摄像头实时推流到阿里云公网服务器(Windows + FFmpeg + nginx-rtmp)
  • 明厨亮灶场景违规识别准确率↑32%:陌讯动态适配算法实战解析
  • Geotools核心类详解
  • 企业级web应用服务器TOMCAT入门详解
  • M8-11读卡器如何通过RS485转Profinet网关在plc写入从站地址
  • 大玄古籍制作软件【详细教程20:txt文档config自动化配置】,排版软件,自动排版,排版设计,个人出书,一键排版