我正在创建自己的类似JavaScript Array的对象,并且有一些调用闭包的方法。我只是想知道在哪里定义封闭最有效的地方。

例如,假设我有一个map函数和一个chop函数:

MyObject.prototype =
{
  map: function(fn) { ... applies fn to each element ... };

  chop: function()
  { this.map(
    function(element)
    {
      ... chop off last character ...
    }
  )};
}


这样做更有效吗?

MyObject.prototype =
{
  map: function(fn) { ... applies fn to each element ... };

  __chop: function(element)
  {
    ... chop off last character ...
  }

  chop: function()
  { this.map(this.__chop) };
}

最佳答案

第二个效率更高。这个

  chop: function()
  { map(
    function(element)
    {
      ... chop off last character ...
    }
  )}


将在每次调用chop()时创建一个新的函数对象,并带有各自的运行时和内存开销。由于将没有对新对象的任何持久引用,因此可以立即对其进行大量收集,但是创建不必要的对象仍然是一种不好的做法。

我建议采用以下模式:

MyObject.prototype = (function() {

    function map(fn) { ... }

    function chopElement(element) { ... }

    function chop() {
        this.map(chopElement);
    }

    return {
        map : map,
        chop : chop
    };

})();

09-18 04:03