iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript中闭包的概念、原理及作用是什么
  • 829
分享到

JavaScript中闭包的概念、原理及作用是什么

2024-04-02 19:04:59 829人浏览 独家记忆
摘要

本篇内容主要讲解“javascript中闭包的概念、原理及作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中闭包的概念、原理及作用是

本篇内容主要讲解“javascript中闭包的概念、原理及作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中闭包的概念、原理及作用是什么”吧!

 一、闭包概念

闭包:有权访问另一个函数作用域中的变量的函数;一般情况就是在一个函数中包含另一个函数。

从官方定义我们知道闭包是一个函数,只不过这个函数有[超能力],可以访问到另一个函数的作用域。

为什么说这个叫做[超能力]呢?

因为我们知道函数作用域是独立的、封闭的,外部的执行环境是访问不了的,但是闭包具有这个能力和权限。

那闭包是怎样的一个表现形式呢?

第一,闭包是一个函数,而且存在于另一个函数当中

第二,闭包可以访问到父级函数的变量,且该变量不会销毁

function person(){     var name = '有鱼';     function cat(){         console.log(name);     }     return cat; } var per = person();// per的值就是return后的结果,即cat函数 per();// 有鱼 per()就相当于cat() per();// 有鱼 同上,而且变量name没有销毁,一直存在内存中,供函数cat调用 per();// 有鱼

二、闭包原理

闭包的实现原理,其实是利用了作用域链的特性,我们都知道作用域链就是在当前执行环境下访问某个变量时,如果不存在就一直向外层寻找,最终寻找到最外层也就是全局作用域,这样就形成了一个链条。

例如:

var age = 18; function cat(){     age++;     console.log(age);// cat函数内输出age,该作用域没有,则向外层寻找,结果找到了,输出[19]; } cat();//19

看到这里,大家都会说这不就是最简单的函数和变量形式吗?闭包在哪里?别急,我们接着往下看:

如果我们再次调用时,结果会一直增加,也就变量age的值一直递增。

cat();//20 cat();//21 cat();//22

如果程序还有其他函数,也需要用到age的值,则会受到影响,而且全局变量还容易被人修改,比较不安全,这就是全局变量容易污染的原因,所以我们必须解决变量污染问题,那就是把变量封装到函数内,让它成为局部变量。

function person(){     var age = 18;     function cat(){         age++;         console.log(age);     }     return cat; } person();// 19 person();// 19

这里又出现问题了,每次调用函数person,进入该作用域,变量age就会重新赋值为18,所以cat的值一直是19;所以需要做一下调整:

var per = person();//per相当于函数cat per();// 19 即cat() 这样每次调用不在经过age的初始值,这样就可以一直增加了 per();// 20 per();// 21

而且变量age在函数内部,不易修改和外泄,相对来说比较安全。

三、闭包作用

作用1:隐藏变量,避免全局污染

作用2:可以读取函数内部的变量

同时闭包使用不当,优点就变成了缺点:

缺点1:导致变量不会被垃圾回收机制回收,造成内存消耗

缺点2:不恰当的使用闭包可能会造成内存泄漏的问题

这里简单说一下,为什么使用闭包时变量不会被垃圾回收机制收销毁呢,这里需要了解一下js垃圾回收机制;

JS规定在一个函数作用域内,程序执行完以后变量就会被销毁,这样可节省内存;使用闭包时,按照作用域链的特点,闭包(函数)外面的变量不会被销毁,因为函数会一直被调用,所以一直存在,如果闭包使用过多会造成内存销毁。

JavaScript中闭包的概念、原理及作用是什么

四、闭包应用

需求:实现变量a 自增

1、通过全局变量,可以实现,但会污染其他程序

var a = 10; function Add(){     a++;     console.log(a); } Add(); Add(); Add();

2、定义一个局部变量,不污染全局,但是实现不了递增

var a = 10; function Add2(){     var a = 10;     a++;     console.log(a); } Add2(); Add2(); Add2(); console.log(a);

3、通过闭包,可以是函数内部局部变量递增,不会影响全部变量,完美!!

var a  = 10; function Add3(){     var a = 10;     return function(){         a++;         return a;     }; }; var cc =  Add3(); console.log(cc()); console.log(cc()); console.log(cc()); console.log(a);

到此,相信大家对“JavaScript中闭包的概念、原理及作用是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: JavaScript中闭包的概念、原理及作用是什么

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

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

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

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

下载Word文档
猜你喜欢
  • JavaScript中闭包的概念、原理及作用是什么
    本篇内容主要讲解“JavaScript中闭包的概念、原理及作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中闭包的概念、原理及作用是...
    99+
    2022-10-19
  • python中闭包的概念是什么
    闭包是指在一个函数内部定义的函数,并且内部函数可以访问外部函数的局部变量。具体来说,闭包是由函数对象和其引用环境组合而成的实体。 闭...
    99+
    2023-10-27
    python
  • Oracle ASM的概念以及工作原理是什么
    这期内容当中小编将会给大家带来有关Oracle ASM的概念以及工作原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。      A...
    99+
    2022-10-19
  • PHP中heredoc的概念及作用是什么
    这篇文章主要讲解了“PHP中heredoc的概念及作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中heredoc的概念及作用是什么”吧!在php中,存在一种定义字符串的方法,...
    99+
    2023-06-20
  • JavaScript中闭包的实现原理是什么
    这篇文章将为大家详细讲解有关JavaScript中闭包的实现原理是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是闭包,为什么要用它?闭包是指有权访问另一个函数作...
    99+
    2022-10-19
  • JavaScript闭包原理及作用的示例分析
    小编给大家分享一下JavaScript闭包原理及作用的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!简介说明本文介绍JavaScript的闭包的作用、用途及其原理。闭包的定义闭包是指内部函数总是可以访问其所在的外部...
    99+
    2023-06-22
  • Javascript闭包的作用是什么
    本篇内容主要讲解“Javascript闭包的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Javascript闭包的作用是什么”吧!对于初学者来说,理...
    99+
    2022-10-19
  • JavaScript中Promise的基本概念及使用方法是什么
    本篇内容主要讲解“JavaScript中Promise的基本概念及使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中Promis...
    99+
    2022-10-19
  • java中@SuppressWarnings的概念是什么及怎么用
    本文小编为大家详细介绍“java中@SuppressWarnings的概念是什么及怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“java中@SuppressWarnings的概念是什么及怎么用”文章能帮助大家解决疑惑,下面跟着小编的...
    99+
    2023-06-30
  • Go中闭包的底层原理是什么
    这篇文章将为大家详细讲解有关Go中闭包的底层原理是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 什么是闭包一个函数内引用了外部的局部变量,这种现象,就称之为闭包。例如下面的这段代码中,adder...
    99+
    2023-06-25
  • PHP闭包及Clourse类的作用是什么
    今天小编给大家分享一下PHP闭包及Clourse类的作用是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。PHP Clou...
    99+
    2023-06-29
  • Java中弱引用的概念和作用是什么
    本篇内容介绍了“Java中弱引用的概念和作用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!概览本文会通过对弱引用的定义讲起,然后通过案...
    99+
    2023-06-16
  • Java中AQS的原理及作用是什么
    这篇文章主要介绍“Java中AQS的原理及作用是什么”,在日常操作中,相信很多人在Java中AQS的原理及作用是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中AQS的原理及作用是什么”的疑惑有所...
    99+
    2023-06-15
  • JavaScript 函数闭包的含义和作用是什么
    这篇文章主要讲解了“JavaScript 函数闭包的含义和作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript 函数闭包的含义和作用...
    99+
    2022-10-19
  • bucket的原理及作用是什么
    bucket的原理及作用是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。存储空间是您用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。您可以设置和...
    99+
    2023-06-03
  • JVM中Synchronized作用及原理是什么
    这篇文章主要介绍“JVM中Synchronized作用及原理是什么”,在日常操作中,相信很多人在JVM中Synchronized作用及原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JVM中Synch...
    99+
    2023-07-05
  • JavaScript中Promise的原理是什么及如何使用
    这篇文章主要介绍了JavaScript中Promise的原理是什么及如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript中Promise的原理是什么及如何使用文章都会有所收获,下面我们一起...
    99+
    2023-07-05
  • php中闭包函数的作用是什么
    这篇文章给大家分享的是有关php中闭包函数的作用是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是闭包函数:在子函数内部使用通过use关键字使用父函数的变量,这种方式就是闭包函数格式:function&n...
    99+
    2023-06-15
  • C语言中的DIV的用法及DIVAB概念是什么意思
    C语言中的DIV的用法及DIVAB概念是什么意思,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。你对DIV在C语言中的用法及DIVAB的概念是否...
    99+
    2022-10-19
  • Oracle 12c 备份与恢复中resetlogs的概念及用法是什么
    这篇文章给大家介绍Oracle 12c 备份与恢复中resetlogs的概念及用法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。备份与恢复是一门重要...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作