广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >怎么理解javascript闭包
  • 838
分享到

怎么理解javascript闭包

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

本篇内容介绍了“怎么理解javascript闭包”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一梯队理解

本篇内容介绍了“怎么理解javascript闭包”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

第一梯队理解

我个人认为闭包之所以难以理解很重要的一点在于,很多概念我们在理解的过程中都会在潜意识里和这个概念本身的名词强度关联在一起在揣摩这个概念的意思,如果自己的理解和这个名词本身的字面意思看上去不那么相关的话,就会在内心产生巨大的怀疑感,不敢相信自己的理解是否正确,哪怕是正确的。所以在立即一个概念本身的含义过程中需要一个步骤就是将自己对概念的理解和名词本身找到某种莫名的连接方法就好理解了。

而闭包这个名词换做谁听上去都不知道是在说什么,这本身就给理解这个概念造成了很大的困惑,因为一个通俗易懂的代名词就可以很好地解释一个概念的50%了。比如变量就是变化的字面量,条件语句,分支语句大家一听就很好理解其概念是什么。所以首先大家需要在概念上给闭包建立一个初级的感性认识。一下这句话是我见到的简单易懂的一种解释。

functions that return functions

意思是:闭包就是一个函数,只不过这个函数是另一个函数的返回值。

没错,最表面上看似乎就是这样的。比如写一个闭包:

function fn1() {       var temp = 10;       return function() {           console.log(++temp);       }  }  fn1()();

上面的例子里return出来的那个function就是一个非常简单的闭包,表面上看和上面的定义语句差不多就是一个从函数里返回的函数。

***梯队的理解到这接差不多了,虽然不正确,虽然很粗糙,但对形成一个感性认识应该是够了,总结一个***梯队的认识,什么是闭包:

  • 一个函数

  • 被其他函数return出来的函数。

这个时候认识里面应该有这么一个概念,就是闭包和我们已经理解的一个概念应该差不多,那就是函数,没错刚开始就可以这么理解,闭包就是一个函数,是一个特殊的函数,就好像js中的方法也是函数一样。

第二梯队理解

有了***梯队的认识,我们慢慢修正大脑中对闭包的认识。有的人理解闭包就是一个嵌套在函数里的函数,内部函数可以访问外部函数的数据而已。这么理解是不对的。看下面这段代码:

function fn1() {   var temp = 10;   function fn2() {       console.log(++temp);   }   fn2() } fn1()

可是这时的fn1()无论执行多少次打印都是11,永远不会变,所以这还不是闭包,只有当你return出来一个内部function的时候才会形成一个闭包,闭包就是return出来的这个函数。这个内部函数可以close-over外部函数的变量直到内部的这个函数(闭包)结束掉。

这时我们再来看看***梯队中的代码

function fn1() {       var temp = 10;       return function() {           console.log(++temp);       }  }  vat func1 = fn1(); // func1就是一个闭包(就是fn1返回的函数)。  func1(); // 打印11  func1(); // 打印12

这个时候func1是全局变量,但是打印的时候却访问的是fn1的局部变量temp并且,当fn1()函数执行完之后,temp的变量并没有被垃圾回收到仍然存在于内存中,这就是闭包的特点。也就是刚刚我们说的内部函数close-over外部函数的变量。理解这句话就可以很好的与闭包这两个字关联起来理解闭包这个概念了。

总结第二梯队理解:

  1. 闭包是一个有特定功能的函数。他是一个可以读取其他函数内部变量的一个函数。

  2. 因为在javascript中如果你想读取一个函数内的变量(通常称为局部变量)只有函数的子函数可以访问。

  3. 那么将这两个概念交叉理解,就可以简单的理解闭包就是一个定义在函数内部的函数,且可以访问函数里的局部变量的那个函数。

  4. 在没有闭包,我们没法访问函数内部的局部变量,有了闭包之后,我们就可以访问函数内部的局部变量了,等同于闭包解决了一个问题,那就是在函数内部和函数外部之间建立了一座桥梁。

第三梯队理解

这个时候我们可以看看官方定义的闭包:闭包是指那些能够访问独立(自由)变量的函数  (变量在本地使用,但定义在一个封闭的作用域中)。换句话说,这些函数可以“记忆”它被创建时候的环境。

再看另一个定义:那么什么是闭包呢?这里有两个定义。在计算机科学中(而不是数学中),一个闭包是一个函数或者一个函数的引用,以及他们所引用的环境信息(就像是一个表,这个表存储了这个函数中引用的每一个没有在函数内声明的变量)。

这两个定义中都有一个概念,***个里“封闭的作用域”,第二个里“所引用的环境信息”。这里我们都可以用上面的close-over外部函数的变量暂时理解。

也就是闭包总是要有两个部分的:

  1. 一部分是一个函数。

  2. 另一个部分是被这个函数“包住”的(有的理解为“带走”的,或者是close-over住的)一些环境信息(可以理解环境信息就是变量),但是却不在这个函数中声明的变量表(称之为free  variables或者outer variables)。

还有一个不是那么呆的定义:闭包允许你封装一些行为(函数就是行为),像其他对象一样将它传来传去(函数是first-class  function),但是不论怎样,它仍然保持着对原来最初上下文的访问能力(它还能访问到 outer variables)。

这个时候的理解就比较抽象了,因为又涉及到作用域的概念,又是一个封闭的作用域。其实上面括号中有一段话(就像是一个表,这个表存储了这个函数中引用的每一个没有在函数内声明的变量),这个表就是在定义这个闭包的“闭”的范围有哪些。

第四梯队理解

闭包通过访问外部变量,一个闭包可以维持(keep  alive)这些变量。在内部函数和外部函数的例子中,外部函数可以创建局部变量,并且最终退出;但是,如果任何一个或多个内部函数在它退出后却没有退出,那么内部函数就维持了外部函数的局部数据。

“怎么理解javascript闭包”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 怎么理解javascript闭包

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

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

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

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

下载Word文档
猜你喜欢
  • JavaScript闭包怎么理解
    这篇文章主要介绍“JavaScript闭包怎么理解”,在日常操作中,相信很多人在JavaScript闭包怎么理解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScri...
    99+
    2022-10-19
  • 怎么理解javascript闭包
    本篇内容介绍了“怎么理解javascript闭包”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一梯队理解...
    99+
    2022-10-19
  • 怎么理解JavaScript闭包函数
    本篇内容介绍了“怎么理解JavaScript闭包函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!变量作用域要理解JavaScript闭包,...
    99+
    2023-06-25
  • JavaScript闭包如何理解
    这篇“JavaScript闭包如何理解”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Jav...
    99+
    2022-10-19
  • 怎样解析javascript的闭包
    今天就跟大家聊聊有关怎样解析javascript的闭包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是闭包:闭包是一个存在内部函数的引用关系。该引用指向的是外部函数的局部变量对象...
    99+
    2023-06-29
  • JavaScript闭包详解
    目录1.什么是闭包?1.2 闭包的记忆性:函数能够记住定义时所处的环境1.3 闭包现象:JS中每次创建函数时都会创建闭包2.闭包的功能:记忆性、模拟私有变量2.1 记忆性2.2 模拟...
    99+
    2022-11-12
  • JavaScript中闭包怎么用
    这篇文章将为大家详细讲解有关JavaScript中闭包怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。闭包真的是学过一遍又一遍,Js博大精深,每次学习都感觉有新的收获...
    99+
    2022-10-19
  • javascript怎么形成闭包
    这篇文章主要介绍了javascript怎么形成闭包的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇javascript怎么形成闭包文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2022-10-19
  • 如何理解并掌握JavaScript闭包
    这篇文章主要介绍“如何理解并掌握JavaScript闭包”,在日常操作中,相信很多人在如何理解并掌握JavaScript闭包问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何...
    99+
    2022-10-19
  • JavaScript闭包原理及作用详解
    目录简介闭包的用途柯里化实现公有变量缓存封装(属性私有化)闭包的原理垃圾收集简介实际开发中的优化简介 说明 本文介绍JavaScript的闭包的作用、用途及其原理。 闭包的定义 闭包...
    99+
    2022-11-12
  • JavaScript中怎么应用闭包
    JavaScript中怎么应用闭包,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。什么是闭包(Closure)简单讲,闭包就是指有权访问另一...
    99+
    2022-10-19
  • 详解JavaScript闭包问题
    闭包是纯函数式编程语言的传统特性之一。通过将闭包视为核心语言构件的组成部分,JavaScript语言展示了其与函数式编程语言的紧密联系。由于能够简化复杂的操作,闭包在主流JavaSc...
    99+
    2022-11-12
  • JavaScript内存管理与闭包实例详解
    目录1. 内存管理的理解1.1 认识内存管理1.2 JavaScript的内存管理2. 垃圾回收(GC)2.1 认识垃圾回收2.2 GC算法 – 引用计数2.3 GC算法...
    99+
    2022-11-13
  • JavaScript闭包是什么及怎么用
    这篇“JavaScript闭包是什么及怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript闭包是什么及怎...
    99+
    2023-07-04
  • 什么是JavaScript闭包
    本篇内容主要讲解“什么是JavaScript闭包”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是JavaScript闭包”吧!什么是闭包简言之,闭包是由函数...
    99+
    2022-10-19
  • JavaScript闭包是什么
    这篇文章给大家分享的是有关JavaScript闭包是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概论在讨论ECMAScript闭包之前,先来介绍下函数式编程(与ECMA-2...
    99+
    2022-10-19
  • JavaScript高级之闭包详解
    目录1. 闭包的概念知识点的补充:2. 闭包的作用:3. 闭包示例3.1 点击li,输出当前li的索引号总结1. 闭包的概念 来看一般函数的执行和启发: func...
    99+
    2022-11-12
  • JavaScript闭包知识点整理
    这篇文章主要讲解了“JavaScript闭包知识点整理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript闭包知识点整理”吧!在谈闭包之前,我...
    99+
    2022-10-19
  • javascript闭包的模块化怎么做
    本篇内容主要讲解“javascript闭包的模块化怎么做”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript闭包的模块化怎么做”吧!说明闭包的重要使用是模块化,它可以将成员变量的命...
    99+
    2023-06-20
  • JavaScript中的闭包closure怎么使用
    这篇文章主要介绍“JavaScript中的闭包closure怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript中的闭包closure怎么使用”文章能帮助大家解决问题。闭包简述...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作