在Javascript:The Definitive Guide中的解释是这样的:
JavaScript函数是将要执行的代码以及执行这些代码的作用域构成的一个综合体。在计算机科学术语里,这种代码和作用域的综合体叫做闭包。所有的JavaScript函数都是闭包。但当一个嵌套函数被到处到它所定义的作用域外时,这种闭包才是有趣的。当一个嵌套的函数以这种方式使用时,它常常明确的叫做一个闭包。
说简单些就是,一个函数体内嵌套了函数,而这个嵌套函数又被在它的包含(上层)函数外的地方引用,此时就形成闭包。其关键之处在于,嵌套函数可以访问包含函数定义的局部变量、参数等数据,而按道理包含函数在调用结束后将会被回收(销毁),但因为存在引用关系(嵌套函数被外部引用,嵌套函数又引用包含函数的一些数据,具体的说是活动对象(activation object)),所以嵌套函数和包含它的函数不会被回收,这时定义在包含函数的局部变量还是有效的。如果被外部引用的嵌套函数定义的一些方法对包含它的函数中的局部变量进行了访问,那么这个行为是有效的。所以说在这种情况下闭包才显得有趣。一般情况下大家说的闭包也就指的是这种情况。举个例子如下:function Person()
{
    var what = "you can't use me directly!";
    
    return function()
    {
        this.teach = function(stat)
        {
            what = stat;
        }        this.say = function()
        {
            alert(what);
        }
    }
}var man = Person();
var tom = new man();
tom.say();
tom.teach("u are a good boy!");
tom.say();