我应该在哪里定义我的Javascript闭包?

cdm*_*kay 0 javascript closures

我正在创建自己的JavaScript类数组对象,我有调用闭包的方法.我只是想知道定义闭包的最有效位置在哪里.

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

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

  chop: function() 
  { this.map( 
    function(element) 
    {
      ... chop off last character ... 
    } 
  )};
}
Run Code Online (Sandbox Code Playgroud)

这样做更有效率吗?

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

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

  chop: function() 
  { this.map(this.__chop) };
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*oph 5

第二个更有效率.这个

  chop: function() 
  { map( 
    function(element) 
    {
      ... chop off last character ... 
    } 
  )}
Run Code Online (Sandbox Code Playgroud)

将在每次调用时创建一个新的函数对象,chop()具有相应的运行时和内存开销.由于不会有任何对新对象的延迟引用,因此可以立即收集行李,但创建超过必要的对象仍然是不好的做法.

我建议采用以下模式:

MyObject.prototype = (function() {

    function map(fn) { ... }

    function chopElement(element) { ... }

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

    return {
        map : map,
        chop : chop
    };

})();
Run Code Online (Sandbox Code Playgroud)