2012-04-19 141 views
4

我讀了一些Facebook的JavaScript代碼,再通過此我無法弄清楚的目的好奇的功能傳來:這個函數在Facebook的JavaScript源代碼中做了什麼?

function bagof(a) { 
    return function() { 
     return a; 
    }; 
} 

至於我可以告訴

  • bagof是一個接受參數a的函數。
  • bagof立即返回一個匿名函數。
  • 返回的函數然後返回原始參數a

我假設的bagof的用法是這樣的:

newFunction = bagof("This is the data"); 
​console.log(newFunction());​ //Logs "This is the data"​​​​​​​​​​​​ 

有什麼意義?爲什麼不直接使用或存儲傳入a的變量或函數?

The source file看起來像它包含應用程序的許多實用功能。

回答

4

bagof()方法可用作創建常量函數的工廠(函數始終返回相同的值)。

即使在這樣的情況下使用:

var randomFun = bagof(Math.random()); 

randomFun()調用將始終返回相同的值,因爲Math.random()只計算一次(急切地)。我想這是在某些API需要某種方法時使用的實用方法,我們只是想傳遞不變的值。相反的:

giveMeCallback(function() {return 42}) 

,你可以簡單地說:

giveMeCallback(bagof(42)) 
+0

因此,該功能並沒有真正「做」什麼,但作爲簡寫容易產生其他功能? – 2012-04-19 19:58:21

+0

@MichaelJasper:不,它沒有副作用,也不計算任何東西。其唯一目的是創建功能,考慮[工廠方法模式](http://en.wikipedia.org/wiki/Factory_method_pattern) – 2012-04-19 20:02:49