var foo = ( function() {
    var secret = 'secret';
    // “闭包”内的函数可以访问 secret 变量,而 secret 变量对于外部却是隐藏的
    return {
        get_secret: function () {
            // 通过定义的接口来访问 secret
            return secret;
        },
        new_secret: function ( new_secret ) {
            // 通过定义的接口来修改 secret
            secret = new_secret;
        }
    };} () );
    foo.get_secret (); // 得到 'secret'
    foo.secret; // Type error,访问不能
    foo.new_secret ('a new secret'); // 通过函数接口,我们访问并修改了 
    secret 变量foo.get_secret (); // 得到 'a new secret'


引用 Douglas Crockford [1] :

之所以可能通过这种方式在 JavaScript 种实现公有,私有,特权变量正是因为闭包闭包是指在 JavaScript 中,内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后