1,什么是闭包 “官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
官方的解释实在是太高大上了,反正我是没有理解。闭包简单理解就是函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。说的在直白一点就是当function嵌套function的时候,内部函数可以访问外部函数里面的变量。
可以把闭包和面向对象结合起来,把闭包的外部函数想象成一个class,外部函数里面的变量想象成私有变量,闭包函数想象成一个普通方法,如果想实现某种逻辑的话,可以在普通方法里面实现,去实例化外部函数并调用普通方法即可, 我觉得这样更容易理解闭包。
闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。
接下来让我们先来看个例子
function fun(){ var n=0; this.plus = function(){ return n+=1; } } var _fun = new fun(); console.log(_fun.plus()) console.log(_fun.plus()) console.log(_fun.plus())