在 JavaScript 中,闭包最好的理解是:函数中的函数。
在 foo 函数中有两个 func 函数,由于他们一个没有加 this,一个加了 this,所以他们是有区别的,this 是用来限定上下文的,具体请参见 this 和执行上下文。这两个 func 就可以说是形成闭包了。
从中可以看出,闭包中可以使用外面函数的参数、外面函数的内部变量、外面函数的内部函数(其他闭包)。
在 JavaScript 中,闭包是很有用的,比如:setTimeout、JavaScript 类等。
在 IE 中,使用闭包,可能会造成内存泄露,不知道新版本的 IE 浏览器中是否解决了此问题。
要完整地了解闭包,可参见 JavaScript Closures,应用可参见:惰性函数定义模式。