首页 > 代码库 > 什么是闭包

什么是闭包

基础储备:要理解闭包,首先必须理解JS中变量的作用域。

闭包的作用:可以读取函数内部的变量(外部无法读取);让这些值始终保存在内存中。

function n1(){
    var n = 99;
    function n2(){
         alert(n);
    } 
    return n2;      
}
var temp = n1();         // 返回 n2函数
temp();                  // 返回 99

n = 99 在执行中被 n2 捕捉,n1 执行完毕(函数执行完毕,内存中的变量会被销毁),n=99 通过 n2 依然能够访问。

 —— 返回的函数,并非孤立的函数,它让周围的变量环境形成一个封闭的“环境包”一并返回。

function counter(){
    var cnt = 0; 
    function center(){
        return ++cnt;
    }
    return center;
}
var inc = counter(); 
alert(inc());            // 返回 1
alert(inc());            // 返回 2   

/*闭包的计数器*/

 

[1] 只要存在调用内部函数的可能,JS就需要保留被引用的函数,而且JS运行时需要跟踪引用这个内部函数的所有变量,直到最后一个变量销毁,JS才能释放相应的内存空间。

[2] 由于闭包会使的函数中的变量都被保存在内存中,内存消耗极大,所以不能滥用闭包,负责会造成网页性能问题,IE中可能导致内存泄漏。再退出函数之前,将不用的局部变量删除

 

化繁为简的去认识,有助于深入研究和运用。

 

版权声明:本文为博主原创,未经博主允许不得转载。

什么是闭包