从显示模块模式调用对象和数组

时间:2013-01-24 15:03:08

标签: javascript design-patterns

var GlobalObject = (function(){

    var arr1 = [];
    var arr2 = [];
    var arr3 = [];
    var arr4 = []; 

        return {

         }

})();
  1. 现在我如何在应用程序中调用GlobalObject.arr1?
  2. 当我进行推送和弹出时,它是否会保持其参考和价值。
  3. 这是否会导致内存泄漏

2 个答案:

答案 0 :(得分:2)

arr1仅在GlobalObject函数的范围内定义。如果要全局访问它,则需要让GlobalObject函数返回对它的引用。阅读functional scope in javascript以更好地理解这一点。目前,您的函数返回一个空对象。你想做这样的事情:

...
return {
   "array1": arr1,
   "array2": arr2,
   "array3": arr3,
   "array4": arr4
};

(尽管您可以通过不返回来维护这些数组的隐私

GlobalObject将保留arr1的引用和值,直到您手动取消引用它(将其设置为null)。 Javascript's garbage collector仅删除不再需要的对象。

您当前的代码显示没有内存泄漏。注意circular references and closures

答案 1 :(得分:1)

  1. 除非arr1作为返回对象的属性值公开,否则不能。
  2. 这取决于你的其余代码
  3. 对于(1),您必须确保返回的对象的一个​​属性是对数组的引用:

        // ...
        return {
          whatever: arr1,
          // ...
        };
    

    至于内存泄漏,没有任何关于这样的设置特别有问题。