闭包的应用

 闭包的应用

 

闭包是ECMAScript最强大的特性之一。所谓“闭包”,是指在一个函数的执行过程中返回另一个函数对象。如:
function testClosure()
{
        //private
    var a="private";

    function getValue()
    {
            //引用testClosure的变量
        alert( a );
    }
        //返回对内部函数的引用
    return getValue;
}
var getV = testClosure();
getV();
在阐述闭包执行调用的过程之前,我们需要了解一下JavaScript的垃圾自动回收机制。
ECMA262规范要求遵循本规范的语言均要设计垃圾自动回收机制,但是规范中并没有详细说明相关的细节,而具体的回收方式留给语言自身来决定。尽管不同的引擎实现的方式和侧重点不同,但大致的思想都是相同的,即如果对象不再“可引用(由于不存在对它的引用,使执行代码无法再访问到它)”时,该对象就成为垃圾回收的目标。因而,在将来的某个时刻(不确定何时)会将这个对象销毁并将它所占用的一切资源释放,以便操作系统重新利用。类似于C语言的堆栈管理,在JavaScript中,当正常退出一个执行环境时就满足类似的条件。此时,作用域链结构中的活动对象及在该执行环境中创建的任何对象(包括函数对象),都不再“可引用”,因此将成为垃圾回收的目标。
上例中,由于getV变量引用了testClosure方法返回的内部getValue方法,因此testClosure执行环境中的变量,以及所创建的Function对象等都不会被垃圾回收,仍然可以通过所引用的变量访问到testClosure方法所定义的内部全局变量。

posted @ 2009-03-13 14:58  我的javaIT  阅读(136)  评论(0编辑  收藏  举报