彻底搞懂闭包

---恢复内容开始---

1、闭包的定义

官方的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境表达式(通常是一个函数),因而这些变量也是这些表达式的一部分。相信很多人看完这个很难懂,其实在不懂之前我也看不懂。先看一段代码:

function a(){
        var i=0;
        function b(){
            alert(++i);
        }
        return b;
    }
    var c=a();
    c();

 这个函数有两个特点:1、函数b嵌套在函数a内部;2、函数a返回函数b。

执行完var c=a()后,变量c实际上是指向函数b,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。

当函数a的内部函数b被函数a外部的一个变量引用的时候,就创建了一个闭包。

2、闭包的作用

简言之,就是a执行完并返回后,闭包使得js的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。这是最直白的描述。虽然很不专业。由于闭包的存在,使得函数a返回后,a中的i始终存在,这样每次执行c(),i就会自动加1后弹出值。

---恢复内容结束---

原文地址:https://www.cnblogs.com/shj-com/p/6716397.html