关于闭包

什么是闭包?我的理解是,闭包就是能够读取其他函数内部变量的函数。众所周知,在js里,函数内部可以直接读取全局变量,但是,在函数外部却无法读取函数内的局部变量,有时候,出于某种需求,我们必须要在外部访问函数内的局部变量,闭包就是这样的存在。

由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

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

function outerFun()
{
 var a=0;
 function innerFun()
 {
  a++;
  alert(a);
 }
 return innerFun;  //注意这里
}
var obj=outerFun();
obj();  //结果为1
obj();  //结果为2
var obj2=outerFun();
obj2();  //结果为1
obj2();  //结果为2

当内部函数 在定义它的作用域 的外部 被引用时,就创建了该内部函数的闭包 ,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量不会被js中的垃圾回收机制 GC 回收,,因为闭包需要它们.

闭包的完整运行机制,看懂你就懂了。

var name = "The Window";   
var object = {
    name : "My Object",   
  getNameFunc : function(){   
      return function(){   
          return this.name;   
      };   
  }   
};   
alert(object.getNameFunc()());  //The Window

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值