如何使用参数传递对函数的引用?

And*_*ech 88 javascript anonymous-function pass-by-reference

可能重复:
如何在JavaScript函数调用中预先设置参数?(部分功能应用)

我需要能够使用给定的参数集传递对函数的引用.

以下是传递不带参数的引用的示例:

var f = function () {
    //Some logic here...
};

var fr = f; //Here I am passing a reference to function 'f', without parameters
fr(); //the 'f' function is invoked, without parameters
Run Code Online (Sandbox Code Playgroud)

现在我需要做的是传递相同的f函数,但这次我需要将参数传递给引用.现在,我可以使用匿名函数来执行此操作,并f使用新创建的函数内的参数调用函数,如下所示:

var f = function () {
        //Some logic here...
    };

var fr = function (pars) {
    f(pars);
}; //Here I am creating an anonymous function, and invoking f inside it

fr({p : 'a parameter'}); //Invoking the fr function, that will later invoke the f function with parameters
Run Code Online (Sandbox Code Playgroud)

但我的问题是,有没有办法直接引用f带参数的函数fr,但没有将它包含在匿名函数中?

如果fr没有参数(fr()),我需要分配给它以使其可调用,以便在fr调用时执行f(1,2,3)?

[更新] 我跟随Jason Bunting这里回答的部分功能和他发布的JavaScript功能正是我所寻找的.这是解决方案:

function partial(func /*, 0..n args */) {
  var args = Array.prototype.slice.call(arguments).splice(1);
  return function() {
    var allArguments = args.concat(Array.prototype.slice.call(arguments));
    return func.apply(this, allArguments);
  };
}
Run Code Online (Sandbox Code Playgroud)

Jas*_*ing 79

你所追求的是部分功能应用.

不要被那些不理解那个和currying之间的细微差别的人所愚弄,他们不同的.

部分功能应用程序可用于实现,但不是 currying.以下是关于差异的博客文章的引用:

在部分应用程序接受函数的情况下,从中构建一个函数,该函数接受较少的参数,currying构建函数,这些函数通过函数组合获取多个参数,每个参数都采用一个参数.

这已经得到了回答,请参阅此问题以获得答案:如何在JavaScript函数调用中预先设置参数?

例:

var fr = partial(f, 1, 2, 3);

// now, when you invoke fr() it will invoke f(1,2,3)
fr();
Run Code Online (Sandbox Code Playgroud)

再次,请查看详细信息.

  • 请注意未来的读者,请确保在[他的其他答案]中包含Jason提供的`partial`功能(http://stackoverflow.com/a/321527/1366033) (5认同)
  • 作为Jason的`partial`函数的替代,[UnderscoreJS](http://underscorejs.org)库也提供了`_.partial`函数. (2认同)