iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >JS闭包的知识点详解
  • 936
分享到

JS闭包的知识点详解

2024-04-02 19:04:59 936人浏览 安东尼
摘要

本篇内容主要讲解“js闭包的知识点详解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS闭包的知识点详解”吧!一、什么是闭包?学习一个陌生的概念,我们首先要去明

本篇内容主要讲解“js闭包的知识点详解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS闭包的知识点详解”吧!

一、什么是闭包?

学习一个陌生的概念,我们首先要去明白是什么?也就是闭包是什么?要想完全掌握闭包,一定要清楚函数作用域、内存回收机制、作用域继承。我们就简单讲一下这几个概念。

1. 函数作用域

作用域的概念,形象描述的话,可以认为它是一个封闭的空间,只允许在这个封闭的空间内进行一些操作,也将这个封闭空间称为私有作用域。在 JS  中,一个函数的执行就会在内存中创建一个私有作用域——封闭的空间。

JS闭包的知识点详解

JS闭包的知识点详解

比如在函数中定义一个变量,只能在函数这个私有作用域中使用(也就是封闭空间)。只要超出了这个作用域,就找不到该变量了。

而且函数执行完成后,这个私有作用域(封闭的空间)就会销毁。有一种情况它是不会销毁的,那就是“闭包”,后边会讲到。

2. 内存回收机制

内存回收机制就是不在用到的内存,我们系统就自动进行回收从而清理出空间供其他程序使用。那回收的规则是什么?

JS闭包的知识点详解

内部函数引用着外部的函数的变量,外部的函数尽管执行完毕,作用域也不会销毁。从而形成了一种不销毁的私有作用域。

某一变量或者对象被引用着,因此在回收的时候不会释放它,因为被引用代表着被使用,回收器不会对正在引用的变量或对象回收的。

3. 作用域继承

所谓的作用域继承,就像是儿子可以继承父亲的财产一样。比如小鹿这里有一个大的盒子作为一个父级的作用域,然后在这个大的盒子里边放一个小的盒子,作为子作用域。我们规定可以在小盒子中获取到大盒子中的东西,大盒子不能获取小盒子里的东西就称为作用域继承。

JS闭包的知识点详解

在 JS 中,道理是一样的,在一个函数里边我们再声明一个函数,内部函数可以访问外部函数作用域的变量,而外部的函数不能获取到内部函数的作用域变量。

那好,上边的这几个概念理解了之后,什么是闭包对你来说已经不是什么问题。

大白话说什么是闭包,那就是在一个函数里边再定义一个函数。这个内部函数一直保持有对外部函数中作用域的访问权限(小盒子一直可以有大盒子的访问权限)。

JS闭包的知识点详解

函数执行,形成一个私有的作用域,保护里边的私有变量不受外界的干扰,除了保护私有变量外,还可以存储一些内容,这样的模式叫做闭包。

动画实现:

JS闭包的知识点详解

二、闭包的作用是什么?

想必你对闭包还是有点懵懵懂懂,没关系,我们再继续深入了解。闭包主要的作用是什么呢?为什么要使用闭包呢?

通过上边对闭包的解释,外部函数 return  内部函数,但是仍然还是可以有访问外部函数的作用域,因为外部一直保持着引用。这就让我们发现它的可用之处。

不是有块作用域不销毁吗?我们可以用来保存一些内容,还可以用来保护一些私有的变量。我们总结出闭包有两个作用,分别为保护和保存。

三、闭包的应用场景

既然我们知道闭包的作用是保存和保护,那在实际项目中哪里用到了呢?

1. 保护作用

团队开发时,每个开发者把自己的代码放在一个私有的作用域中,防止相互之间的变量命名冲突;把需要提供给别人的方法,通过 return 或 window.xxx  的方式暴露在全局下。

Jquery源码中也是利用了这种保护机制。

2. 保存作用

选项卡闭包的解决方案。我们经常在网页中使用选项卡,但是它存在一个问题,那就是索引引发的问题,其实和下边的经典面试题问题相同。

四、经典的闭包面试题

循环绑定事件引发的索引什么问题?怎么解决这种问题?

JS闭包的知识点详解

此时运行程序,你会得出的结果都是 len 的数值。

为什么会出现这种问题,我们如何解决呢?

原因很简单,所有的事件绑定都是异步的,当触发点击事件,执行方法的时候,循环早就结束了。

我们在多说一点,什么是同步什么是异步?

  • 同步:JS 中当前这个任务没有完成,下面的任务都不会执行,只有等当前彻底完成,才会执行下面的任务。

  • 异步:JS 中的当前任务没有完成,需要等一会在完成,此时我们可以继续执行下面的任务。

解决方案:

当点击事件执行的时候,就会在私有作用域查找 i 的值,此时私有作用域没有 i ,就回去全局作用域查找,此时全局作用域的 i  已经被改变。所以说,要创建一个私有作用域的 i 。

方法一,闭包的方式。闭包终于排上用场了,用来保存私有的变量。

JS闭包的知识点详解

但是闭包解决又优点,也有缺点。优点就是通过创建私有作用域(闭包)方式解决,循环几次,就创建几个私有作用域(闭包),然后,每个私有作用域都有一个私有变量 i  ,存的值分别是循环的值。

缺点是生成多个不销毁的私有作用域(堆内存),对性能有一定的影响。

方法二,使用自定义属性。我们给每个对象添加一个索引属性就 OK 了。

JS闭包的知识点详解

终极解决方案,这是 es6 中的知识,因为之前在 JS 中是没有块级作用域的概念的,到了 ES6 中就有了,Let  声明的变量就可以更好的解决上述问题。

JS闭包的知识点详解

到此,相信大家对“JS闭包的知识点详解”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: JS闭包的知识点详解

本文链接: https://www.lsjlt.com/news/81776.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JS闭包的知识点详解
    本篇内容主要讲解“JS闭包的知识点详解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS闭包的知识点详解”吧!一、什么是闭包学习一个陌生的概念,我们首先要去明白...
    99+
    2024-04-02
  • Javascript中的闭包知识点讲解
    本篇内容介绍了“Javascript中的闭包知识点讲解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. ...
    99+
    2024-04-02
  • JS封闭函数、闭包、内置对象知识点整理
    本篇内容主要讲解“JS封闭函数、闭包、内置对象知识点整理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS封闭函数、闭包、内置对象知识点整理”吧!一、变量作用域...
    99+
    2024-04-02
  • JavaScript闭包知识点整理
    这篇文章主要讲解了“JavaScript闭包知识点整理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript闭包知识点整理”吧!在谈闭包之前,我...
    99+
    2024-04-02
  • javascript知识点详解
    目录一.JavaScript基本介绍二、Javascript基础语法三、JavaScript事件例子2:当点击div标签时,做一件事,如点击后弹出对话框。——用id类例子3:添加标签...
    99+
    2024-04-02
  • RPM包知识点详细介绍
    这篇文章主要介绍“RPM包知识点详细介绍”,在日常操作中,相信很多人在RPM包知识点详细介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”RPM包知识点详细介绍”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-16
  • 【知识点】python的__init__详解
    介绍__init__方法的作用 __init__ 方法是 Python 中面向对象编程中类的特殊方法,也称为构造方法,当创建一个类的实例时,__init__ 方法会自动调用。 它的主要作用是初始化实例的属性,在实例被创建后,你可以通过这...
    99+
    2023-09-02
    python Powered by 金山文档
  • 详解Java注解知识点
    目录一、注解是什么二、jdk支持的注解有哪些2.1 三种常用的注解:2.2 元注解三、注解实例四、总结一、注解是什么 Java 注解用于为 Java 代码提供元数据,看完这句话也许你...
    99+
    2024-04-02
  • JS知识点有哪些
    小编给大家分享一下JS知识点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 暂时性死区只要块级作用域存在let命...
    99+
    2024-04-02
  • js重点知识汇总
    这篇文章主要讲解了“js重点知识汇总”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“js重点知识汇总”吧!1、几种数据类型,哪些是值类型,哪些是引用类型数据类...
    99+
    2024-04-02
  • MySQL索引知识点详解
    这篇文章主要讲解了“MySQL索引知识点详解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL索引知识点详解”吧!普通索引创建索引这是最基本的索引,它...
    99+
    2024-04-02
  • 【知识点】Python 的np.prod函数详解
    np.prod是Numpy库中的一个函数,全称为numpy.prod,它的作用是计算数组中所有元素的乘积。该函数是一个快速的计算积的方法,可以接收任意数组或矩阵作为输入,并返回这些数字的乘积。 举个例子: import numpy as...
    99+
    2023-10-02
    python numpy Powered by 金山文档
  • Java集合HashMap的知识点详解
    这篇文章主要讲解了“Java集合HashMap的知识点详解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java集合HashMap的知识点详解”吧!一、什么是哈希表在讨论哈希表之前,我们先大...
    99+
    2023-06-02
  • Java SpringBoot的相关知识点详解
    目录1. IOC和DI2. Spring容器加载Bean/创建对象的时机3. @Autowired注解4. @Configuration配置类5. @Conditional条件注解6...
    99+
    2024-04-02
  • java伪泛型知识点详解
    说明 1、Java中的泛型是伪泛型。这种泛型实现方法称为类型擦除 ,基于这种方法实现的泛型称为伪泛型。 2、由于Java的泛型只在编译阶段发挥作用,因此在写代码时,起到了检查的作用,...
    99+
    2024-04-02
  • k8s编排之DaemonSet知识点详解
    目录如何对 StatefulSet 进行“滚动更新”(rolling update)?下面重点讲解一个\知识点:DaemonSet列举几个例子:API 对象的...
    99+
    2023-01-17
    k8s编排DaemonSet k8s DaemonSet
  • python中__init__方法知识点详解
    目录介绍__init__方法的作用讲解__init__方法的语法演示如何在类中使用__init__方法初始化类的属性讲解如何使用__init__方法给对象动态添加属性__init__...
    99+
    2023-05-16
    python __init__方法有什么用 python中init方法 python __init__的作用
  • R语言“循环”知识点详解
    可能有一种情况,当你需要执行一段代码几次。 通常,顺序执行语句。 首先执行函数中的第一个语句,然后执行第二个语句,依此类推。 编程语言提供允许更复杂的执行路径的各种控制结构。 循环语...
    99+
    2024-04-02
  • js中闭包有什么特点
    这篇文章给大家分享的是有关js中闭包有什么特点的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。闭包是js中的一大特色,也是一大难点。简单来说,所谓闭包就是说,一个函数能够访问其函数...
    99+
    2024-04-02
  • k8s编排之Deployment知识点详解
    目录Pod 复杂的API对象nginx-deploymentDeployment 及类似控制器总结Deployment 所控制的 ReplicaSet查看Pod 复杂的API对象 P...
    99+
    2023-01-17
    k8s编排Deployment k8s Deployment
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作