学习JS闭包

作用域

  • 作用域分为:全局作用域和函数作用域。
  • 链式作用域:子对象会一级一级往上查找父对象的变量。

什么是闭包?

  • 闭包可以理解为定义在函数内部的函数,是由一个函数以及与其相关的引用环境组合而成的实体。可以在函数内部访问外部函数的变量,并且这些变量可以在外部函数执行结束后仍然保持其状态。
function test(x){return function innerTest(y){return x+y }
}

闭包的特点

  • 只要闭包没有被垃圾回收机制清除,外层函数提供的运行环境也不会被清除,它的内部变量就始终保存着当前值,供闭包读取。
  • 闭包可以访问和修改其创建时捕获的外部环境中的变量值,从而实现状态的保存和共享。
  • 闭包可以延长变量的生命周期,从而实现回调、事件处理等高级操作。
  • 闭包可以私有化变量,从而避免命名冲突和污染全局作用域。

闭包的应用

  • 防抖节流的实现。
  • 柯里化函数的实现:柯里化指的是能够接受函数作为参数或返回函数作为结果的函数,。
  • 高阶函数实现:高阶函数指的是能够接受函数作为参数或返回函数作为结果的函数。而闭包属于返回函数的一类。是高阶函数的一种特殊形式。
  • 缓存的实现。

闭包的缺点

  • 闭包对外函数有引用时,若闭包被调用且未及时解绑,则会造成外部函数的变量无法释放,导致内存泄露。
    • 将闭包函数设置为null。
    • 将闭包函数重新赋值。
  • 闭包涉及作用域链查找,性能相较直接访问局部、全局变量要低,频繁调用浪费性能。
    • 将闭包函数执行结果缓存起来,以便减少性能开销。
  • 闭包可以访问外部函数中的私有变量,会导致信息泄漏和安全问题,闭包滥用或使用不当,可能导致数据被意外泄漏。
    • 避免其他代码访问到闭包中的变量,可以使用立即执行函数将闭包函数包装起来。并将其返回值设置为一个包含公共接口的对象。只有这些公共接口才能访问到闭包变量,可以有效地保护闭包中的私有信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/112497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app开发

uni-app 官方手册:uni-app官网 一:tarBar:一级导航栏,即 tab 切换时显示对应页。 在pages.json文件里写入如下代码: 此效果:

笔记本电脑Windows10安装

0 前提 安装windows10的电脑为老版联想笔记本电脑,内部没有硬盘,临时加装了1T的硬盘。 1u盘准备 准备u盘,大小大于16G。u盘作为系统盘时,需要将内部的其他文件备份,然后格式化。u盘格式化后,插入一款可以…

log4j的级别的说明

一 log4j的级别 1.1 级别类型 TRACE 》DEBUG 》 INFO 》 WARN 》 ERROR 》 FATAL 级别高低顺序为: trace级别最低 ,Fatal级别最高。由左到右,从低到高 1.2 包含范围 原则: 本级别包含本级别以及大于本级别的内容,…

iMazing苹果用户手机备份工具 兼容最新的iOS16操作系统

现在距离苹果秋季新品发布会已过去月余,新iPhone 14系列和新版的iOS 16操作系统也如约与我们见面了,相信大家在9月初抢购的iPhone 14也基本到手了,但随之到来的数据资料备份迁移却是一件令人头大的事情,使用官方提供的iTunes软件卡…

K8s上的监控系统(Grafana)使用和理解说明

Grafana (集成Prometheus On K8s集成)主要步骤说明 客户端指标收集 —— K8s 集群资源等 —— Prometheus 监控数据收集 —— Grafana —— 通过PromQL 进行数据查询 —— 预警告警等通知 Kubernetes集群资源:这包括了CPU、内存、磁盘、网络等各种类型的资源。这些资…

knife4j-openapi3 无法使用swagger注解@ApiModelProperty

问题描述 当使用knife4j springboot3, 发现无法使用 swagger注解ApiModelProperty需要单独导入一个包但是即使导入这个包也不生效,即使配置了description也为空 原因 简单来说:swagger2 > swagger3的时候出现了破坏性的更新 将ApiMode…

基于SSM的培训学校教学管理平台的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

CentOS 7 安装 MySQL 8

一、卸载MariaDB MariaDB是MySQL 的一个分支,完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。 1、查看版本(如果有就卸载) rpm -qa|grep mariadbrpm -e --nodeps 文件名 二、下载mysql 1、进入 /usr/…

多年没有遇到如此流畅的面试了

美东一公司的面试,有多年没有遇到如此流畅的面试了。 本来说的面试时间是 30 分钟,这个还是第一轮处于电话面试那种,但是不知道为什么最后面试整个时间都延长到了快一个小时,貌似双方都还继续沟通下,有点意犹未尽的感觉…

什么是AJAX

AJAX(Asynchronous JavaScript and XML)是一种用于创建交互式、动态网页应用程序的Web开发技术。它允许网页在不刷新整个页面的情况下,与服务器进行异步通信,以获取或发送数据。以下是对AJAX的主要组成部分和概念的概述&#xff1…

Leetcode 第 361 场周赛题解

Leetcode 第 361 场周赛题解 Leetcode 第 361 场周赛题解题目1:2843. 统计对称整数的数目思路代码复杂度分析 题目2:生成特殊数字的最少操作思路代码复杂度分析 题目3:统计趣味子数组的数目思路代码复杂度分析 题目4:边权重均等查…

华为OD 数组去重和排序(100分)【java】A卷+B卷

华为OD统一考试A卷B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入&#xff…

华为云HECS云服务器docker环境下安装nacos

华为云HECS云服务器,安装docker环境,查看如下文章。 华为云HECS安装docker-CSDN博客 一、拉取镜像 docker pull nacos/nacos-server二、宿主机创建挂载目录 执行如下命令: mkdir -p /usr/local/nacos/logs mkdir -p /usr/local/nacos/con…

Coreldraw2020最新64位电脑完整版本下载教程

安装之前所有的杀毒软件都要退出。无论是360,腾讯管家,或者电脑自带的安全中心,要不然会阻止安装。 CorelDRAW2020版win下载如下:https://wm.makeding.com/iclk/?zoneid55678 CorelDRAW2020版mac下载如下:https://wm.makeding.com/iclk/?…

大河弯弯:CSS 文档流与三大元素显示模式

文章目录 参考环境文档流概念三大显示模式 内联元素概念常见的内联元素宽高由内容决定 块级元素概念常见的块级元素宽度受容器影响,高度受内容影响 内联块级元素概念常见的内联块级元素折中方案 设置元素的显示模式display 属性内联元素与块级元素的切换为什么要通过…

使用Matplotlib画多y轴图

使用Matplotlib画多y轴图 代码成品图 代码 import matplotlib.pyplot as plt import mpl_toolkits.axisartist as AA from mpl_toolkits.axes_grid1 import host_subplot%matplotlib inline config {"font.family": "serif","font.size": 14,&…

保序回归与金融时序数据

保序回归在回归问题中的作用是通过拟合一个单调递增或递减的函数,来保持数据点的相对顺序特性。 一、保序回归的作用 主要用于以下情况: 1. 有序数据:当输入数据具有特定的顺序关系时,保序回归可以帮助保持这种顺序关系。例如&…

计算机加减乘除的本质

只应用位运算实现加减乘除是程序员的基本修养,这里应用通俗易懂的python实现加减乘除,其他语言同理。 应对python无限制扩展位数的方法 # 限制变量为32位 def int32(value):return -(value & 0x80000000) | (value & 0x7FFFFFFF)加法,本位进位…

机器学习 | 基于随机森林的可解释性机器学习

可解释性机器学习在当今数据驱动的决策系统中扮演着重要的角色。随着人工智能技术的快速发展,越来越多的应用场景需要了解和解释模型的决策过程,以提高透明度、可信度和可接受性。乳腺癌作为一种常见的恶性肿瘤,早期诊断对于治疗和预后具有重要意义。 然而,乳腺癌早期诊断…

认识系统服务

daemon与service 达成某个服务(service)需要一个守护进程(daemon)在后台运行。 实现 ssh 服务,需要 sshd 这个守护进程实现 mysql 服务,需要 mysqld 这个守护进程实现 cron 服务,需要 crond 这…