---恢复内容开始---
1、闭包的定义
官方的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境表达式(通常是一个函数),因而这些变量也是这些表达式的一部分。相信很多人看完这个很难懂,其实在不懂之前我也看不懂。先看一段代码:
function a(){ var i=0; function b(){ alert(++i); } return b; } var c=a(); c();
这个函数有两个特点:1、函数b嵌套在函数a内部;2、函数a返回函数b。
执行完var c=a()后,变量c实际上是指向函数b,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。
当函数a的内部函数b被函数a外部的一个变量引用的时候,就创建了一个闭包。
2、闭包的作用
简言之,就是a执行完并返回后,闭包使得js的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。这是最直白的描述。虽然很不专业。由于闭包的存在,使得函数a返回后,a中的i始终存在,这样每次执行c(),i就会自动加1后弹出值。
---恢复内容结束---