1
var GlobalObject = (function(){

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

        return {

         }

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

2 回答 2

2

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

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

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

GlobalObject保持arr1的引用和值,直到您手动取消引用它(将其设置为null)。Javascript 的垃圾收集器只删除不再需要的对象。

您当前的代码显示没有内存泄漏。注意循环引用和闭包

于 2013-01-24T15:19:00.613 回答
1
  1. 你不能,除非arr1作为返回对象的属性值公开
  2. 是的
  3. 这取决于您的其余代码

对于 (1),您必须确保返回的对象的属性之一是对数组的引用:

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

至于内存泄漏,这样的设置没有什么特别成问题的。

于 2013-01-24T15:05:45.560 回答