2013-03-01 36 views
5

我偶然發現了這段代碼,並且當外層函數沒有使用任何參數時,並沒有真正看到需要返回一個函數嗎?此Javascript函數工廠添加了什麼值?

var percent = (function() { 
    var fmt = d3.format(".2f"); 
    return function(n) { return fmt(n) + "%"; }; 
})() 

我缺少的東西還是可以改寫爲:

var percent = function(n) { 
    return d3.format(".2f")(n) + "%"; 
} 

回答

5

它可以,但你每次都而不是僅一次調用d3.format(".2f")。根據函數的作用和調用頻率,這可能會增加額外的性能開銷。

隨着IIEF(立即調用的函數表達式)返回封閉,你是「緩存」 fmtpercent所有未來的用途。

+0

啊,這是緩存。謝謝。 – dani 2013-03-01 12:26:58

相關問題