那些開源程序中讓人歎爲觀止的代碼 - 2 單例模式

單例模式

解決問題:只執行一次的函數javascript

開源程序:underscorejava

有時候咱們會須要使用單例模式,好比須要一個函數,這個函數在整個應用運行的時候只被訪問一次。若是再次訪問就會訪問上次的執行結果。緩存

這個需求的一個經典實現能夠在underscore的代碼中找到:閉包

_.once = function(func) {
    var ran = false, memo;
    return function() {
      if (ran) return memo;
      ran = true;
      memo = func.apply(this, arguments);
      func = null;
      return memo;
    };
  };

once能確保func只調用一次,若是用func返回一個什麼對象,這個對象成了單例。源碼也比較簡單,無非就是用一個標誌位來標示是否運行過,緩存返回值。能夠說,這是閉包應用的一個比較經典的實例。app

相關文章
相關標籤/搜索