`
lige239141
  • 浏览: 171912 次
  • 性别: 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闭包个人理解

    js闭包的个人理解

    闭包的理解

    闭包的理解

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

    JS闭包理解 什么是闭包? 当有一个函数想要访问另一个函数内部的变量,这个是访问不了的。所有我们要用闭包来访问。所以简单的来说,闭包就是连接函数内部和外部的一座桥梁,通过闭包我们能够访问其他函数内部的...

    闭包的理解1

    闭包的理解1

    js 闭包的理解与注意事项

    js 闭包的理解与注意事项

    JavaScript闭包深入理解.pdf

    JavaScript闭包深入理解.pdf

    深入理解javascript原型和闭包

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

    JS 闭包的理解

    NULL 博文链接:https://onestopweb.iteye.com/blog/2360023

    JavaScript对闭包的理解.md

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

    理解_JavaScript_闭包

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

    javaScript闭包的理解

    网上的例子很多,讲解的和理解起来的简易程度不禁相同,整理的例子和吸收的帖子供大家参考

    闭包的加深理解1

    闭包的加深理解1

    js闭包理解之倒计时

    网上大多只是讲解js闭包的大概意思和小例子,但真实用于项目中又该怎么用呢。这个例子真实的告诉大家在项目中的用法

    谈谈我对JavaScript原型和闭包系列理解(随手笔记8)

    主要介绍了谈谈我对JavaScript原型和闭包系列理解(随手笔记8)的相关资料,需要的朋友可以参考下

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

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

    JS中的闭包理解。。。。。。。。

    js闭包 • 每个函数都有一个包含词法环境的执行上下文,它的词法环境确定了函数内的变量赋值以及对外部环境的引用。看上去函数“记住”了外部环境,但其实上是这个函数有个指向外部环境的引用。这就是“闭包”的...

    Java闭包 Java闭包

    JSR-335 将闭包引入了 Java 。闭包在现在的很多流行的语言中都存在,例如 C++、C# 。闭包允许我 们创建函数指针,并把它们作为参数传递。在这篇文章中,将粗略的看一遍Java8的特性,并介绍 Lambda表达式。而且将试...

    数据库求属性集闭包&函数依赖闭包

    3) 计算属性集闭包的算法,在课件里有详细说明。方法很简单,但用文字描述很抽象。。。。不解释。。。 4) 计算函数依赖的闭包。此步骤不作要求,但要会方法。个人总结:将所有属性元素组成一个集合(域)记为R;...

    最符合菜鸟的闭包

    适合最低级菜鸟理解的重点难点知识---闭包.zip

Global site tag (gtag.js) - Google Analytics