4

我正在阅读一些 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

源文件看起来包含许多应用程序的实用功能。

4

1 回答 1

4

bagof()方法可以用作创建常量函数的工厂(函数总是返回相同的值)。

即使您在这种情况下使用:

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

的调用randomFun()将始终返回相同的值,因为Math.random()只评估一次(急切地)。我猜它是当某些 API 需要一个方法并且我们只是想传递常量值时使用的实用方法。代替:

giveMeCallback(function() {return 42})

你可以简单地说:

giveMeCallback(bagof(42))
于 2012-04-19T19:49:42.800 回答