闭包的琐碎理解

接触闭包之后,看了好多网上的资料,看的越来越头疼,看到阮一峰的这篇之后,觉得对闭包有了个清楚的理解,反过来再看以前看过的有关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:这篇文章是给出闭包定义最概括性的并且又容易的理解的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值