簡體   English   中英

我應該在哪里定義我的Javascript閉包?

[英]Where should I define my Javascript closure?

我正在創建自己的類似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
    };

})();

在JavaScript中,創建函數或查找函數都不是代價高昂的操作,因此,如果您有一個其中包含相當數量的元素的“數組”,則這兩種方法之間的差異可以忽略不計。

換一個函數閉包,換一個函數閉包不會導致更高效的代碼。 內存使用效率最高的是根本不使用閉包的內存。

__proto__ = {
  map: function(){},
  _chop: function(str){
    return str.slice( str.length, -1 );
  },
  chop: function(arr){ 
    this.map(this._chop, arr);
  }
}

這個問題在Google上對於“關閉內存使用率”的評價很高,我認為這沒有資格。 這是一個很難診斷的問題。

這里的答案更多是在閉包中隱藏功能的示例,但是它增加了維護該內存空間來存儲那些私有變量的成本。

實際上,它們是同一件事-隨便哪個可讀性更高。 對於它的價值,我更喜歡第二個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM