js系列-闭包

Javascript基础系列之闭包 在上面的代码示例中,`a`函数定义了一个名为`aa`的变量和一个名为`b`的函数,`b`函数引用了`aa`变量,因此JavaScript引擎会保留`a`函数的作用域链,`b`函数可以访问`a`函数的执行上下文,`b`函数内用到了外部函数`a`的变量`aa`,在`a`函数调用结束后该函数执行上下文会销毁,但会保留一部分留在内存中供`b`函数使用,这就形成了闭包。这种函数嵌套和变量共享的方式就是闭包的核心概念。并且 `fun.Closure` 中的内容是 `a` 和 `b` 两个变量,并没有 `c`。 阅读详情

提出问题:

1.什么是闭包(闭包的定义)

2.闭包有什么特点

3.闭包的应用场景

 

闭包

定义:可以访问其他函数内部变量的函数,就是一个闭包

个人感觉,闭包其实是一个独立的函数作用域,类似于全局作用域,里面变量和状态都会被保留下来,方便以后的访问。

闭包特点

1.可以访问函数内部的变量

2.变量的状态会保存在内存中,不会丢失

闭包应用场景

事件回调函数

这是最常见的闭包使用场景,

<body>
    <button>按钮1</button>
    <button>按钮2</button>
</body>
<script>
  var btns = document.querySelectorAll("button");
  for (let i = 0; i < btns.length; i++) {
    btns[i].onclick = (function (i) {
      return function () {
        alert(`点击了第${i + 1}个按钮`);
      };
    })(i);
  }
</script>

闭包问题-内存泄漏

造成内存泄漏的原因也正是闭包的特点-保留上级函数作用域属性。

<body>
  <a id="id" href="">按钮1</a>
</body>
<script>
  //这段代码会导致内存泄露
  function aa() {
    var a = document.getElementById("id");
    a.onclick = function () {
      alert(a.id);
    }
  }
  // 解决方法为
  function bb() {
    var a = document.getElementById("id");
    var id = a.id;//解除循环引用
    a.onclick = function () {
      alert(id);
    }
    a = null;  // 将闭包引用的外部函数中活动对象清除
  }
</script>

总结来看:解决闭包内存泄漏就是将不再使用的外部引用函数指向null。

js系列十:闭包 概念 闭包是一种特殊的对象。 它由两部分组成:执行上下文(代号A),已经在该执行上下文中创建的函数(代码B)。 当B执行时,如果访问了A中变量对象中值,那么闭包就会产生。 我们只需要知道,一个闭包对象,由A,B共同组成,在以后的文章中,都会将以chrome的标准来称呼。 function foo() { var a = 20; var b = 30; function bar() { r... 阅读详情

相关推荐

避坑指南:Ubuntu 22.04上源码编译Autoware.universe(Humble版)的完整流程与常见错误修复

本文详细介绍了在Ubuntu 22.04上源码编译Autoware.universe(Humble版)的完整流程与常见错误修复方法。从环境准备、依赖安装到编译优化,提供了实用的避坑指南和解决方案,帮助开发者高效完成安装并避免常见问题。特别针对源码安装过程中的疑难杂症给出了具体修复建议。

weixin_33712987的博客 382

JS中的闭包

闭包

web$-小白 9207

openCv +3.4.0 车牌定位(C++版本)

#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc.hpp> #include "opencv2/shape.hpp" using namespace ...

Bamboo265925的博客 2336

闭包函数的理解

function fn() { return function () { //s; console.log("hello") return function () { //s1 console.log("world") } } ...

anhumi4350的博客 863

车载网络测试实操源码_使用CAPL脚本进行UDS刷写及其自动化测试

本文主要讲解如何使用CAPL脚本进行UDS刷写及其自动化测试,并结合了几个测试实例进行介绍,希望对大家有所帮助。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1550

OpenCASCADE完整教程专栏完整目录

OpenCASCADE完整教程专栏完整目录

希望我的博客,能帮上你解决学习中工作中所遇到的问题 9694

js 【详解】闭包

如果一个函数访问了此函数的父级及父级以上的作用域变量,那么这个函数就是一个闭包。

朝阳39的博客 3万+

CST与MATLAB连接设置

打开MATLAB,点击"Set Path"按钮,然后点击"Add Folder"。在CST中,点击"Options"菜单,然后选择"Advanced"选项。在弹出的对话框中,点击"COMSOL"选项卡,并确保"Enable COMSOL"复选框被选中。通过上述步骤和示例代码,你可以开始使用MATLAB与CST进行集成,并根据你的具体需求进行进一步的开发和应用。通过这个简单的示例,你可以开始在MATLAB中与CST进行交互,并根据你的需求进行更复杂的操作,如参数化仿真、优化和数据处理等。

TechPulseZ的博客 1966

深入理解js 闭包

要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。 Js代码  var n=999;   function f1(){     alert(n);   }   f1(); // 999另一方面,在函数外部自然无法读取函数内的局部变量。 Js代码  function f

java_goodstudy的博客 8206

YOLOv11改进 | 模型知识蒸馏篇 | 利用模型蒸馏改进YOLOv11进行无损涨点 | CWDLoss(在线蒸馏 + 离线蒸馏)

这篇文章给大家带来最新改进的是模型的蒸馏利用教师模型指导学生模型从而进行模型的涨点,本文的内容不仅可以用于论文中,在目前的绝大多数的工作中模型蒸馏是一项非常重要的技术,所以大家可以仔细学习一下本文的内容,本文从YOLOv11的项目文件为例,进行详细的修改教程,文章内包括完整的修改教程,针对小白我出了视频修改教程,如果你还不会我提供了修改后的文件大家直接运行即可,所以说不用担心不会适用!模型蒸馏真正的无损涨点,蒸馏你只看这一篇文章就足够了!欢迎大家订阅我的专栏一起学习YOLO!

Snu77的博客 3296

【2025年华为秋招(AI)-11月19日-第一题(100分)- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

本文摘要: 本文包含15道单选题和5道多选题,涵盖机器学习、深度学习、概率统计和数值计算等多个领域。单选题涉及Transformer的Softmax层作用、最小二乘法拟合、概率密度计算、注意力机制、反向传播问题、ROC曲线用途、截断误差来源等知识点。多选题考察大模型训练技术、BERT/GPT比较、强化学习对齐方法、CNN常见层以及PCA特性等内容。题目设计注重理论与实践结合,既包含数学推导,又关注前沿技术应用,全面检验读者对机器学习核心概念的理解能力。正确答案均附有详细解析,帮助理解相关技术原理。

m0_73659489的博客 145

JavaScript中的闭包

JavaScript中的闭包

qq_44482048的博客 6424

AutoSAR_BSW高阶 7. Signal Group 信号组

Autosar BSW的高级配置是实现复杂汽车电子系统的关键步骤之一。通过合理配置信号组和使用适当的参数,您可以提高系统性能,确保数据的可靠传输。在本博客中,我们深入探讨了信号组的概念和高级配置参数,并提供了示例代码,希望这些信息能够帮助您更好地理解和应用Autosar BSW的高级配置。如果您在配置过程中遇到任何问题,不妨寻求专业支持,以确保您的汽车电子系统能够顺利运行。Autosar COM 模块是一个广泛应用于汽车行业的关键技术,它使不同的电子控制单元能够有效地通信和协作。

一直在水些技术小文 662

JavaScript之闭包,给自己的Js一场重生(系列七)

JavaScript之闭包 闭包——非常重要但又难以掌握的概念,理解闭包可以看作是某种意义上的重生——《你不知道的Js》 代码+例题让你全程思路清晰!

余光的博客 6万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深入学习JavaScript系列(四)——JS闭包

函数体和创建函数时的作用域就是在一个执行上下文中创建的函数,如果访问了这个执行上下文中变量对象的值,那么闭包就产生了水平有限,很多地方写的不够严谨,下面几篇是我在学习过程中觉得很好的文章,想继续深入了解的同学可以去看看。参考一:# [译]发现 JavaScript 中闭包的强大威力参考二:# JavaScript闭包的底层运行机制参考三:# 我从来不理解JavaScript闭包,直到有人这样向我解释它…参考三:# 破解前端面试(80% 应聘者不及格系列):从闭包说起。

十九万里的博客 872

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

原生js的面试题:JavaScript系列_彻底理解闭包,如何彻底理解闭包,javascript中的闭包如何理解

导航: 一、概念 二、简单示例 三、使用闭包的注意事项 四、闭包的示例      说明一下:如果你对闭包的概念和简单使用会的话,那就可以直接看,第二大点的 第三步" 调用闭包(对闭包的深入理解,这个是重点" 详情: 一、 概念:  官方解释:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。(函数就是一个表达式)  通俗的来说:J...

jiang7701037的博客 1714

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JavaScript系列——闭包

闭包,是函数及其关联的周边环境的引用的组合,在闭包里面,内部函数可以访问外部函数的作用域,而外部函数不能范围内部函数的作用域,从而在内部函数形成一个相对封闭的环境。在JavaScript中,闭包随着函数创建而被创建。

976

JavaScript进阶系列 - 闭包

我的博客仓库 this, call, apply 和 bind 以及箭头函数 用来放一些我看的书籍和学习的记录,欢迎点赞和讨论。 闭包(Closures) 在了解闭包之前,有一些概念必须了解,这些是形成闭包的先决条件。 词法作用域 (lexical scoping) var age = 10; function Tom(){ var name = 'Tom'; function ...

weixin_34378922的博客 234

深入理解javascript原型和闭包系列

深入理解javascript原型和闭包系列 深入理解javascript原型和闭包(0)——目录 深入理解javascript原型和闭包(1)——一切都是对象 深入理解javascript原型和闭包(2)——函数和对象的关系 深入理解javascript原型和闭包(3)——prototype原型 深入理解javascript原型和...

weixin_30876945的博客 262

【前端面试系列】JavaScript闭包

答:闭包是指一个函数及其词法环境的组合。它允许内部函数访问其外部函数的作用域。在JavaScript中,每当创建一个函数,闭包就会在函数创建的同时被创建出来。let y = 10;closure();// 输出15JavaScript中的比较操作符主要分为两类:相等操作符(==)和全等操作符(===理解这两者的区别和使用场景对于编写健壮的代码至关重要。如果您觉得这篇文章对您有帮助,欢迎:徐白知识星球JavaScript闭包大文件上传以及分片上传与断点续传掌握可视区域判断。

徐白知识星球 1412

从零开始学_JavaScript_系列(19)——js系列<6>闭包

(18)闭包 ①函数内部的子函数,用到了父函数的变量,就叫做闭包。 ②可以为函数保存其执行状态, ③其原理大概是: 首先,假如B函数在A函数的内部,则A为外部函数,B为内部函数,B可以访问A的变量(变量的作用域规定的); 然后,假如在函数内部,如果有一个return,那么在return结束前,这个函数中的变量,其值是维持不变的; 另外需要注意,...

weixin_34315665的博客 73

javaScript系列教程之闭包从闭包如何产生理解闭包

闭包的形成过程 1. 外层函数中受保护的变量在内层函数使用 2. 内层函数被外层函数通过return返回 3. 使用全局变量接住被外层函数返回的内层函数 4. 使用全局变量调用返回的函数,调用结束后,由于内层函数中的变量还被接函数的全局变量引用,所以无法释放内存无法释放,闭包形成 内层函数返回方式主要有三种 1. return function(){...} 2. 直接给全局变量赋值一个内部function 3. 将内部函数保存在一个对象的属性或数组元素中一次返回

点燃火柴的博客 263

你不知道的 JavaScript 系列之闭包

什么是闭包 当函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域之外执行,这时就产生了闭包 下面我们可以通过一段代码,清晰地展示了闭包: function foo() { var a = 2; function bar() { console.log(a); } return bar; } var baz = foo(); baz(); // 2 这就是闭包的效果 函数 bar() 的词法作用域能够访问 foo() 的内部作用域,我们将 bar 所引用的函数对象本身当作返回值

baidu_33569474的博客 311

AngularJS系列之JavaScript闭包

转载请注明来源:http://blog.youkuaiyun.com/caoshiying?viewmode=contents。这篇文章针对的是有2年以上编程经验的朋友们参考的,作参考资料之用,不从基础讲起。 1.1.1. 函数字面量 函数字面量包括四个部分,第一部分是关键字,第二部分是...

cheqiane9431的博客 160

【javascript系列】闭包

理解: 定义在一个函数内部的函数

IU 200
上一篇: js系列-函数Function
下一篇: js系列-Object对象
前端蜗牛君
博客等级 码龄10年 274粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值