先撤点题外话,最开始接触这个专业术语,我首先联想到的是女孩子们口中常常提到的“闭口”,一种无法突破表皮最外层、长时间被圈禁在表皮下的痘痘胚胎,大致这么理解吧。其实,这个客观世界里的小东西确实和计算机语言中的闭口有那么几分相似,首先,内部;其次,封闭。
那么什么是闭包? 闭包就是定义在 一个函数 内部 的 函数。
举个例子:
function init(){
var name ='ah'; //init作为父函数,变量name是一个被init创建的局部变量
function useName(){ //useName()作为内部函数,就是一个闭包
console.log(name); // 使用了父函数中声明的变量
}
useName();
}
init();
如果内部函数useName()引用了位于外部函数的变量name,
当外部函数调用完毕后,这些变量在内存中不会被 释放,因为闭包useName()需要它们.
匿名函数(anonymous function)本身就是一个闭包,所有嵌套在function中的function都是一个强大的闭包。
简述闭包的用途:一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中,避开garbage collection的扼杀。
再来看看官方回答:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。(这句话是copy,表示自己也不想看,因为看不懂啊)我还是循序渐进,从简单易懂开始了解它吧,后续会跟进,毕竟闭包这个东西还有许多知识值得大家细细琢磨。