揭示模块模式中的私有成员

Private members in the revealing module pattern

var app = (function(){ 
    var foo = 'x';

    var bar = function (){
        ...
    };

    var xx = function () {
        bar();
    }

     return {
        xx:xx
     }

})();

由于该函数是立即调用的函数表达式 (IIFE),因此为应用程序变量分配了返回对象文字。但是私有成员以什么方式返回呢?成员 foo 是否不存在于应用程序中,因为它未在任何 public 方法中引用?对 bar 的引用如何存储在 app 变量中?

变量 foo 是私有的,因为它不能从 IIFE 外部访问,但可以从 xx、bar 和 IIFE 的其他部分访问,因为它在它们的范围内(或之上)。 app 变量将只知道对象 {xx: xx},仅此而已,因此 IFFE 就像一个黑盒子。 app 变量和相邻的变量知道从中得到什么,但它无法获得内部的任何值,例如的 foo.