JavaScript闭包

JavaScript闭包

  • 前言
  • 概念
  • 代码实例以及讲解
  • 闭包作用
  • 闭包缺点

前言

本文主要讲解JavaScript中的闭包,闭包是什么?

闭包(closure)是一个函数以及其捆绑的周边环境状态(lexical
environment,词法环境)的引用的组合。换而言之,闭包让开发者可以从内部函数访问外部函数的作用域。在 JavaScript
中,闭包会随着函数的创建而被同时创建。

概念

简而言之,闭包就是一个函数体内嵌套了一个子函数体,而这个子函数体由于js的上下文作用域关系,它能取到上级函数的变量并且做判断,这就意味着在子函数中,父函数的值并没有被标记清理,而是延申到了子函数中,优点是可以继续使用该函数变量,缺点也很明显,无法判断该变量是否还需要,所以一直无法清理,造成内存冗余和内存泄漏问题。

代码实例以及讲解

示例一:

		function father(){let a=1let b=2console.log(a);//1function display(){let b=3console.log(a,b);//1 3}display()console.log(b);//2}father()

上述代码中中display就是father函数的闭包,display函数调用了father函数中的a变量,可以成功调用father函数的a变量,并且定义了一个b变量在diaplay函数中覆盖了father函数中的b变量,覆盖成功,但当跳出diaplay函数后,发现在display中的b变量已经被清理了,在函数头中被定义,在函数尾中被清理,而father函数中的b变量因还没有到达father函数尾就打印,所以它仍旧可以被打印出来。
示例二:

function add(a,b){return function(){a++;return a+b;}
}
let num=add(1,2)
console.log(num());//4

想让两个参数相加,其中第一个参数先加1后相加,那么我们可以通过闭包实现,这个闭包可以放在父函数的返回值中,这样就可以把add(1,2)赋值给一个变量,然后再调用这个变量,则实现了这个效果。

闭包作用

  1. 隐藏变量
  2. 延长函数内变量生命周期
  3. 让函数外部可以调用到函数内部数据

闭包缺点

  1. 延长了函数内变量生命周期,局部变量没有释放,内存不会被垃圾回收机制回收,导致内存占用时间过长。
  2. 可能造成内存泄漏

所以要尽量避免使用闭包,且使用闭包时要及时进行释放处理。

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

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

相关文章

wpf devexpress 绑定数据编辑器

定义视图模型 打开前一个项目 打开RegistrationViewModel.cs文件添加如下属性到RegistrationViewModel类 [POCOViewModel] public class RegistrationViewModel {public static RegistrationViewModel Create() {return ViewModelSource.Create(() > new RegistrationVie…

OpenAI的Whisper蒸馏:蒸馏后的Distil-Whisper速度提升6倍

1 Distil-Whisper诞生 Whisper 是 OpenAI 研发并开源的一个自动语音识别(ASR,Automatic Speech Recognition)模型,他们通过从网络上收集了 68 万小时的多语言(98 种语言)和多任务(multitask&am…

Golang环境搭建Win10(简洁版)

Golang环境搭建Win10 Golang环境搭建(Win10)一、前言二、Golang下载三、配置环境变量3.1、配置GOROOT3.2、配置GOPATH3.3、配置GOPROXY代理 Golang环境搭建(Win10) 一、前言 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken…

代码随想录算法训练营第五十九天 | LeetCode 739. 每日温度、496. 下一个更大元素 I

代码随想录算法训练营第五十九天 | LeetCode 503. 下一个更大元素 II、42. 接雨水 文章链接:下一个更大元素 II、接雨水 视频链接:下一个更大元素 II、接雨水 1. LeetCode 503. 下一个更大元素 II 1.1 思路 本题是给一个数组求右边第一个比当前元素大的…

大模型的语言能力

NLP作为一个领域为基础模型开辟了道路。虽然这些模型在标准基准测试中占据主导地位,但这些模型目前获得的能力与那些将语言描述为人类交流和思维的复杂系统的能力之间存在明显的差距。针对这一点,我们强调语言变异的全部范围(例如&#xff0c…

用照片预测人的年龄【图像回归】

在图像分类任务中,卷积神经网络 (CNN) 是非常强大的神经网络架构。 然而,鲜为人知的是,它们同样能够执行图像回归任务。 图像分类和图像回归任务之间的基本区别在于分类任务中的目标变量(我们试图预测的东西)不是连续…

Perl的LWP::UserAgent库爬虫程序怎么写

Perl的LWP::UserAgent库是一个用于发送HTTP请求的Perl模块。它可以用于编写Web爬虫、测试Web应用程序、自动化Web操作等。以下是一个简单的使用LWP::UserAgent库发送HTTP GET请求的Perl脚本的例子: #!/usr/bin/perluse strict; use warnings; use LWP::UserAgent;# …

向量数据库——AI时代的基座

1.前言 向量数据库在构建基于大语言模型的行业智能应用中扮演着重要角色。大模型虽然能回答一般性问题,但在垂直领域服务中,其知识深度、准确度和时效性有限。为了解决这一问题,企业可以利用向量数据库结合大模型和自有知识资产,…

PY32F002B从压缩包到实现串口printf输出

最近学习使用芯领的PY32F002B开发板,记录学习历程供有同样需求的人参考。 本文主要讲述利用开发板实现printf语句串口输出。 开发环境的初步搭建 官方提供了一个压缩文件,文件名py32f002B_231026.zip, 链接:https://pan.baidu.c…

什么是Selenium?如何使用Selenium进行自动化测试?

什么是 Selenium? Selenium 是一种开源工具,用于在 Web 浏览器上执行自动化测试(使用任何 Web 浏览器进行 Web 应用程序测试)。   等等,先别激动,让我再次重申一下,Selenium 仅可以测试Web应用…

internet download manager2024中文绿色版(IDM下载器)

在现代互联网时代,文件下载已经成为我们日常生活中必不可少的一项技能。无论是下载软件、音乐、视频还是其他文件,一个高效的下载方法能够为我们节省时间和精力。本文将为您提供一份简明扼要的下载教程,让您轻松掌握文件下载的技巧。 intern…

jsp中使用PDF.js实现pdf文件的预览

本文介绍的是在使用jsp作为模板引擎的spring-mvc项目中,如何利用 PDF.js实现pdf文件的预览。 1、下载 PDF.js Getting Started (mozilla.github.io) 下载解压后其中有两个目录,直接将这两个文件夹放到项目的web资源目录中。此时相当于把PDF.js这个项目也…

Vue h5页面手指滑动图片

场景: 四张图,要求随着手指滑动而滑动 代码: imgs是父盒子 poster-item是每个图片 .imgs {white-space: nowrap;overflow: hidden;overflow-x: auto;margin-bottom: 17px;.poster-item {display: inline-block;vertical-align: middle;wid…

NI USRP RIO软件无线电

NI USRP RIO软件无线电 NI USRP RIO是SDR游戏规则的改变者,它为无线通信设计人员提供了经济实惠的SDR和前所不高的性能,可帮助开发下一代5G无线通信系统。“USRP RIO”是一个术语,用于描述包含FPGA的USRP软件定义无线电设备,例如…

机器学习第9天:决策树分类

文章目录 机器学习专栏 介绍 基本思想 使用代码 深度探索 优点 估计概率 训练算法 CART成本函数 实例数与不纯度 正则化 在鸢尾花数据集上训练决策树 机器学习专栏 机器学习_Nowl的博客-CSDN博客 介绍 作用:分类 原理:构建一个二叉树&#…

数据结构与算法之美学习笔记:21 | 哈希算法(上):如何防止数据库中的用户信息被脱库?

目录 前言什么是哈希算法?应用一:安全加密应用二:唯一标识应用三:数据校验散列函数解答开篇内容小节 前言 本节课程思维导图 如果你是 一名工程师,你会如何存储用户密码这么重要的数据吗?仅仅 MD5 加密一下…

YOLO目标检测——无人机检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用:无人机识别数据集说明:无人机检测数据集,真实场景的高质量图片数据,数据场景丰富标签说明:使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(json)和yolo(txt)三种格式标签…

Unity开发之C#基础-集合(字典)(Dictionary)

前言 Hello 兄弟们 一转眼俩月又过去了(失踪人口回归) 不出意外的是出意外了 失踪了两个月 有点对不起我这为数不多的粉丝们 实不相瞒忙的焦头烂额 也没心情写博客 实在对不住各位 好了长话短说 今天这篇文章是讲解c#当中的新的一种集合的表现&#xff…

689. 三个无重叠子数组的最大和(dp)

这道题使用动态规划 解法一:非常规的动态规划 这道题相当于选出3个长度为k的子数组,要求子数组和最大,返回的是每个子数组的第一个元素的下标。 首先,求所有长度为k的子数组的和,即sum,并将结果存储在对应…

富友支付最近“战况”

中国人民银行上海市分行官网在昨天披露了一份关于富友支付的行政处罚公示信息。富友支付因为涉嫌违法违规的反洗钱行为而遭到中国央行的罚款。 罚款金额达到455万,可谓相当可观。 当支付机构受到罚款处罚时,一些公司会选择在收到罚单后发表声明&#xff…