`
lige239141
  • 浏览: 174909 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

闭包的琐碎理解

阅读更多
接触闭包之后,看了好多网上的资料,看的越来越头疼,看到阮一峰的这篇之后,觉得对闭包有了个清楚的理解,反过来再看以前看过的有关javascript的闭包的文章,觉得好理解都了。以下是看后几篇文章的笔记记录。

 

阮一峰的有关JavaScript闭包的理解

 

在javascript函数内部可以直接读取全局变量,而在函数外部自然无法读取函数内的局部变量。

只有函数内部的子函数才能读取局部变量,这个函数内部的子函数就是闭包。

简单的点说,闭包就是定义在一个函数内部的函数。当然闭包的形式不只只有这一种,但是这是大多数时候的情况。

 

闭包的作用:它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

第二点举个例子说明下:

function f1(){

    var n=999;

    nAdd=function(){n+=1}

    function f2(){

      alert(n);

    }

    return f2;

  }

  var result=f1();

  result(); // 999

  nAdd();

  result(); // 1000

为什么内部变量会保持在内存中呢?原因就在内部子函数f2是一个全局变量,这导致该子函数f2始终在内存中,而该子函数f2的存在依赖于其父函数f1,

因此父函数f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。

ps:从闭包的作用来理解闭包 

深入理解JavaScript闭包的理解

 

JavaScript中所有的function都是一个闭包。只是当调用结束后,私有变量无法访问,并且没有外部引用存在,内部对象就会被销毁。

而如果返回了函数,或者被全局引用,这个闭包就保留下来了。这时候就是大部分时候我们所谓的“闭包”。

最简单的闭包例子如下:

function a() {  

    var i = 0;  

    function b() {  

        alert(++i);  

    }  

    return b;  

}  

var c = a();  

c();    

我们对闭包下个定义:当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个我们通常所谓的“闭包”。

 

ps:这篇文章最大的收获是通过对javascript回收机制来理解闭包。

 

 

JavaScript内核系列闭包

ps:这遍文章列了几个闭包的应用如匿名自执行函数,实现封装,缓存.

 

Javascript闭包

允许使用内部函数--即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。 当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。

 

ps:这篇文章是给出闭包定义最概括性的并且又容易的理解的。
分享到:
评论

相关推荐

    js闭包个人理解

    ### JavaScript闭包的理解 在JavaScript中,闭包(Closure)是一种非常重要的概念,它涉及到函数作用域、变量生命周期以及函数内部对外部作用域的访问等多个方面。本文将基于提供的文件内容,深入探讨JavaScript...

    闭包的理解

    ### 闭包的理解 #### 背景与概念 在探讨闭包之前,我们先来了解几个相关的概念:作用域、变量作用域以及函数的作用域链。这些是理解闭包的基础。 - **作用域(Scope)**:指的是变量或者函数可以被访问的范围。 -...

    JS 闭包的理解

    在深入理解闭包之前,我们需要先了解JavaScript的作用域规则。 1. **作用域**:在JavaScript中,变量的作用域分为两种,全局作用域和局部作用域。全局变量在整个代码中都可访问,而局部变量只在其定义的函数内部...

    js闭包的理解以及作用.docx

    闭包是JavaScript中实现数据隐藏和封装的一种重要手段,对于理解和编写高效的JS代码至关重要。 1. **作用域的理解** - **全局变量**:在整个程序中都可访问的变量,它们在整个脚本的生命周期内都存在。 - **局部...

    javascript闭包的理解

    标题《JavaScript闭包的理解》涉及的知识点主要围绕JavaScript编程中的一个重要概念——闭包。闭包是一个高级且复杂的话题,它是JavaScript语言的核心特性之一,同时也是一大难点。要想熟练运用JavaScript,掌握闭包...

    闭包的理解1

    【闭包的理解】 闭包是编程中的一个重要概念,尤其在函数式编程和动态类型语言中广泛使用。它涉及到函数、作用域和变量持久化等核心编程概念。在本文中,我们将深入探讨闭包的含义以及它在不同场景下的应用。 首先...

    js 闭包的理解与注意事项

    js 闭包的理解与注意事项

    深入理解javascript原型和闭包

    深入理解javascript原型和闭包(01)——一切都是对象 深入理解javascript原型和闭包(02)——函数和对象的关系

    javaScript闭包的理解

    ### JavaScript闭包的理解 #### 一、闭包的定义与特点 闭包是JavaScript中一个非常重要的概念,它指的是一个函数能够访问并操作其外部作用域中的变量的能力。这一特性使得JavaScript具有了一些其他语言不具备的...

    JavaScript闭包深入理解.pdf

    首先,我们来理解闭包的定义。官方解释可能较为抽象,但简单来说,JavaScript中的每个函数都可以视为一个闭包,尤其是当一个函数内部定义了另一个函数,并且内部函数引用了外部函数的变量时,就形成了一个强大的闭包...

    js闭包理解之倒计时

    在这个“js闭包理解之倒计时”的主题中,我们将深入探讨如何利用闭包实现一个实际项目中的倒计时功能。 首先,让我们了解一下闭包的基本概念。在JavaScript中,每当函数被创建时,它都会形成一个闭包,这个闭包包含...

    JavaScript对闭包的理解.md

    为了帮助大家快速和较好地理解JavaScript函数中的闭包,本文对JavaScript的闭包进行了分析并进行简易的代码演示,希望本文能够给有需要的人带来一点小小的帮助。

    理解_JavaScript_闭包

    本文结合 ECMA 262 规范详解了闭包的内部工作机制,让 JavaScript 编程人员对闭包的理解从“嵌套的函数”深入到“标识符解析、执行环境和作用域链”等等 JavaScript 对象背后的运行机制当中,真正领会到闭包的实质。

    C语言实现三种闭包算法(传递,自反,对称闭包)

    首先,我们需要理解这些闭包的定义: 1. **传递闭包**:在一个关系集合中,如果对于所有的元素a、b和c,只要a与b有关系且b与c有关系,那么a与c也一定有关系,这样的关系被称为传递闭包。在图论中,这相当于寻找最长...

    js闭包理解

    JavaScript中的闭包是一种重要的编程概念,它涉及到函数、作用域和内存管理等多个方面。闭包的本质是函数能够访问...理解和掌握闭包是提升JavaScript编程能力的重要一步,它能够帮助开发者编写出更高效、更灵活的代码。

    最符合菜鸟的闭包

    对于初学者来说,它可能显得有些抽象,但理解闭包对于提升编程技能至关重要。闭包是一种特殊的作用域,它允许函数访问并操作其外部作用域的变量,即使在外部函数执行完毕后仍然可以访问这些变量。 闭包的核心在于它...

    关系闭包的计算

    本实验旨在通过编程实践的方式帮助学习者深入理解关系闭包的概念,并熟练掌握Warshall算法用于计算关系的自反闭包、对称闭包以及传递闭包。 #### 关键概念解释 1. **自反闭包**:给定集合A上的关系R,如果对于集合...

    离散数学-关系,集合,求自反闭包,对称闭包,传递闭包

    离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包...

    计算NFA中ε闭包

    ### 计算NFA中的ε闭包 #### 一、NFA与ε闭包概念介绍 **非确定有限自动机(NFA)**是一种理论计算模型,它扩展了确定...理解并掌握了NFA和ε闭包的概念及其计算方法后,可以进一步应用于更复杂的自动机转换问题中。

Global site tag (gtag.js) - Google Analytics