1.什么是闭包?
闭包,就是封闭了外部函数作用域中变量的内部函数。但是,如果外部函数不返回这个内部函数,闭包的特性无法显现。如果外部函数返回这个内部函数,那么返回的内部函数就成了名副其实的闭包。此时,闭包封闭的外部变量就是自由变量,而由于该自由变量存在,外部函数即便返回,其占用的内存也得不到释放。
由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
2.闭包有哪些用途?
一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
参考文献:
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
http://www.cn-cuckoo.com/2007/08/01/understand-javascript-closures-72.html#clClDo