我正在阅读一些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看起来包含许多应用程序的实用程序功能。

    最佳答案

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

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

    var randomFun = bagof(Math.random());
    
    randomFun()的调用将始终返回相同的值,因为Math.random()仅被评估一次(急切地)。我猜这是一些API需要某种方法而我们只想传递常量值时使用的实用程序方法。代替:
    giveMeCallback(function() {return 42})
    

    您可以简单地说:
    giveMeCallback(bagof(42))
    

    10-07 14:08