闭包经常用于函数,我们写函数是为了封装重复使用的接口(interface)。当我们在定义这个函数作用域之外的其他作用域调用这个函数时,那这个函数及变量的引用只和定义函数时的词法作用域相关。函数定义的此法作用域环境就形成了闭包。闭包中定义的私有变量因此得到了保护,只能通过特定方法进行修改及访问。闭包是函数作用域及其周围环境词法作用域的集合。
这里最常见的例子就是由一个外部函数所形成的闭包,这个闭包里面定义了一个私有变量和一个函数作为接口的返回值。
function count () {
let counter = 0;
return (function(){return counter++;})
}
当我们在外部调用匿名函数时候,匿名函数中所做的运算是其闭包中的定义的私有变量的值所做的运算
let a = count();
a();