解決問題:只執行一次的函數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