3

我正在编写一些代码,试图在闭包中隐藏一些私有变量。问题是环境在内存方面受到了相当大的限制,所以我还关心保持类的整体占用空间较低。

与仅将对象上的所有方法和变量公开相比,使用闭包隐藏私有实例变量和方法有什么影响?使用闭包的实例会比不使用闭包的实例占用更多内存吗?如果是这样,我希望使用多少内存?

我的代码看起来像这样

function Foo() {
   // private variables
   var status = 3;
   var id = 4;
... 
...

   // private methods
   var privateMethod = function () {
      // do something awesome
   }
   ...

   // a whole bunch of these


   // public methods

   this.publicDriver =  function () {
        privateMethod();
   }
    .. a few more of these

};

相对

function Bar() {
   // only define public variables
   this.x = 1;
   this.y = 3;
}

Bar.prototype.method1 = function () { 
// blah;
}

.... 继续并定义所有其余的方法。

4

4 回答 4

1

好的,据我所见,使用闭包案例构造类会为构造函数中定义的每个方法构造新的函数对象,而原型分配方式会创建一个由对象的所有实例共享的中心函数。然后为正确的实例变量引用按对象解释中心实例。

我猜在闭包示例中定义的每个函数都引用了同一个堆栈帧。

尽管如此,在我的情况下,还有更多的物体漂浮在周围。

于 2010-02-11T01:28:14.767 回答
0

以下链接显示了有关分析 javascript 函数以查看有关其性能的信息的一些提示的信息:

http://ejohn.org/blog/function-call-profiling/

于 2010-02-10T19:12:31.273 回答
0

查看这些基准。虽然它们是继承基准,但它应该让您了解内存影响,因为其中一些使用闭包,而另一些则不使用。

于 2010-02-10T19:14:32.630 回答
0

封闭在闭包中的变量可以在 JavaScript 中从闭包外部更新,这表明该变量只存在一个副本。这意味着没有理由在 JavaScript 中使用闭包会对内存产生任何重大影响。

如果在创建闭包后变量的值被冻结,那将是另一回事,因为这意味着每个闭包都必须拥有其封闭变量的私有副本。

尽管如此,您仍然应该执行实际的基准测试来检查:-)

于 2010-02-11T15:34:37.560 回答