白话 JavaScript 中的闭包

作者:vkvi 来源:ITPOW(原创) 日期:2009-7-7

在 JavaScript 中,闭包最好的理解是:函数中的函数。

function foo(param)
{
    var value = "value"
    var func = function () { alert(param + "\r\n" + value); };
    this.func = function () { func(); };
    //this.func2 = function () { this.func(); }; // this 函数也可以调 this 函数。
}
 
var f = new foo("param");
f.func(); //调用的是有 this 的那个 func。

在 foo 函数中有两个 func 函数,由于他们一个没有加 this,一个加了 this,所以他们是有区别的,this 是用来限定上下文的,具体请参见 this 和执行上下文。这两个 func 就可以说是形成闭包了。

从中可以看出,闭包中可以使用外面函数的参数、外面函数的内部变量、外面函数的内部函数(其他闭包)。

在 JavaScript 中,闭包是很有用的,比如:setTimeout、JavaScript 类等。

在 IE 中,使用闭包,可能会造成内存泄露,不知道新版本的 IE 浏览器中是否解决了此问题。

要完整地了解闭包,可参见 JavaScript Closures,应用可参见:惰性函数定义模式

相关文章