js中闭包

110 阅读1分钟

什么是闭包

看了很多前辈的文章,我的理解就是闭包是一种解决函数外部访问函数内部变量的一种解决方法。这样好像是个抽象概念,我看大神是这么说的,闭包就是能够读取其他函数内部变量的函数。给出一个闭包如下

function f1(){
    var name = 'li';
    function f2(){
        console.log(name);
    }
    return f2;
}
var result = f1;
result()();//li

其中f2就是闭包。

闭包解决的问题

  • 一是前面提到的可以读取函数内部的变量
  • 二是让这些变量的值始终保持在内存中。

直接return与闭包的取别

我刚接触到闭包,就有个疑惑如果仅是想拿到一个函数里的变量,为什么要用闭包呢,直接return不就好了,其实这就是对闭包还不够了解,闭包想要拿到的不仅是内部变量的值,他是用这个内部变量并直接操作这个变量,其实就是拿到了这个变量的操作环境。

闭包的问题

因为使用闭包,变量会一直存在在内存中,如果大量使用闭包,会使内存大量消耗。解决方式就是在退出函数前把不需要保存的变量删除。