js中的闭包函数

看了下js中的闭包函数, 没有理解太会, baidu了一下, 找到下边的内容.

 

// 搜索到的.

function a()
{
var i=0;
function b()
{
alert(++i);
}
return b;
}

var c = a();

c();

 

 

//模仿上例写了一个闭包函数, 原w3school上的例子

function addNum(iNum1, iNum2)
{
// document.write("gogo");
var iBaseNum = 10;
function doAdd()
{
//return iNum1 + iNum2 + iBaseNum;
alert(iNum1 + iNum2 + iBaseNum);
}

return doAdd;

}


var d=addNum(5,15);  // 注意这里的参数要放到声明d的时候填写, 
d();

 

理解以上内容, 首先明确:

1 闭包函数的用途之一是让一个函数中声明的变量在经过该函数之后, 还能够被其它的函数所引用, 如例1 中会一直提示数字增加1

2 闭包函数的使用似乎必须需要被外部的函数来进行引用, 即不被js的gc回收掉??? (这个不确认)

 

下边是搜索到的:

---------------------------------------------------------------------------------------------------------------------

    

四、闭包的应用场景

  1、保护函数内的变量安全。以最开始的例子为例,函数a中i只有函数b才能访问,而无法通过其他途径访问到,因此保护了i的安全性。

  2、在内存中维持一个变量。依然如前例,由于闭包,函数a中i的一直存在于内存中,因此每次执行c(),都会给i自加1。

  以上两点是闭包最基本的应用场景,很多经典案例都源于此。

  五、Javascript的垃圾回收机制

  在Javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。
posted @ 2012-09-07 14:09  tommy&gina  阅读(293)  评论(0编辑  收藏  举报