之前我一直没有搞懂闭包,闭包和自执行函数到底是什么关系
为了弄懂也查阅了很多文档
不过发现现有的文档很多讲的太繁琐,或者说不能很好的解决我的疑惑
相信有很多小伙伴跟我一样有这样的困惑
什么是闭包? 闭包有什么优缺点?自执行函数又和闭包有什么关系?
下面我就用我的理解、例子来为大家答疑解惑
(如果有哪些地方理解有错,希望大家能给我指出来,共勉)

1.什么是闭包?

在理解闭包之前一定要先弄懂什么是全局变量、局部变量,可以先查看我写的关于的文章,理解后在看这篇文章,这样会更好的理解本文o(∩_∩)o 嘻嘻

我所理解的闭包:

  1. 函数嵌套函数
  2. 里面的函数可以使用外层函数块级作用域中的变量和参数。
  3. 私有变量或参数不会被回收
function fn1() {
    var n = 1;

    return function() {
        alert(n);
    }
}
var a = fn1() // fn1()获得的是里面的函数体
a() // 调用里面的函数体 里面的函数能获取到 function fn1 函数内部的参数 n
闭包的优缺点
  • 优点:
    • 可以生成私有变量,不会被回收
    • 可以读取函数内的私有变量
  • 缺点:
    • 内存消耗很大,所以不能滥用闭包
    • 影响网页性能

1.自执行函数和闭包的关系

这个其实很好理解 使用自执行函数就可以省略掉一个函数的声明 看上去会更简洁 本质上还是函数嵌套函数 只不过外层函数会自动执行 返回里面的函数体


var a = (function(){
    var n = 1;

    return function() {
        alert(n);
    }
})()

a()

上面这个代码就是自执行函数自动执行 返回的函数体 直接 赋给了 var 声明的 a 变量
直接调用a() 就可以调用里面的函数,就能使用自执行函数的变量了