1.什么是闭包:

  在javascript中(或者语言),闭包简单的来说是在一个函数内部定义函数,内部定义的函数可以访问外部函数的局部变量,起到了保护的一个作用,内部函数也可以进行一系列的业务代码

  比如以下代码就是一个闭包

var add = (
                function host(){
                  var count = 1;
                  function bei(){return count += 1};
                   return bei
               })()                        

  这个主函数会返回一个内部函数,在定义add变量时要谨记,返回的是内部函数,所以后面有个()代表执行主函数返回内部函数赋值。

  以下是执行结果

 

2.为什么函数里面的变量没有被回收

  首先,分析以上代码,add是一个全局变量,对吧?该全局变量里面引用的就是我们的内部函数,因为add不会被清理,内部函数以及它的count变量也不会被回收

所以就相当于count存在于一个不会被回收的栈中,所以呢,每次返回的值都会+1.