2012-04-19 76 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