细说闭包

204 阅读1分钟

什么是闭包?

如果一个函数访问了另一个函数的内部变量,那么这个函数加这个变量,就叫做闭包。

闭包的用途是什么?

出于各种原因,我们需要获取到函数内部的局部变量,这时我们可以在函数内部定义一个函数,新定义的函数可以间接访问这个变量(相当于给别人一把钥匙)。 例如:

function f1(){
    var n=1;
    function f2(){
        alert(n); // 1
    }
}

在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的,f2就是闭包。

只要把f2作为返回值,我们就可以在外部读取f1的内部变量。

闭包的缺点是什么?

闭包使函数内部的变量不能被内存释放,这些变量就会占用内存,加大内存的消耗,在IE中可能导致内存泄露。解决这个问题的办法就是在不使用这些变量时,及时把不需要的局部变量全部删除。