1.什么是闭包:
在javascript中(或者语言),闭包简单的来说是在一个函数内部定义函数,内部定义的函数可以访问外部函数的局部变量,起到了保护的一个作用,内部函数也可以进行一系列的业务代码
比如以下代码就是一个闭包
var add = ( function host(){ var count = 1; function bei(){return count += 1}; return bei })()
这个主函数会返回一个内部函数,在定义add变量时要谨记,返回的是内部函数,所以后面有个()代表执行主函数返回内部函数赋值。
以下是执行结果
2.为什么函数里面的变量没有被回收
首先,分析以上代码,add是一个全局变量,对吧?该全局变量里面引用的就是我们的内部函数,因为add不会被清理,内部函数以及它的count变量也不会被回收
所以就相当于count存在于一个不会被回收的栈中,所以呢,每次返回的值都会+1.