【发布时间】:2010-09-27 06:05:09
【问题描述】:
可能重复:
How can I pre-set arguments in JavaScript function call? (Partial Function Application)
我需要能够通过给定参数集传递对函数的引用。
这是一个传递引用的示例没有参数:
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
现在我需要传递相同的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
但我的问题是,有没有办法将带有参数的f 函数的直接引用传递给fr,但不将其包含在匿名函数中?
我需要为fr 分配什么以使其可以在没有参数的情况下调用(fr()),以便在调用fr 时执行 f(1,2,3)?
[更新] 我关注了Jason Bunting 对here 关于Partial Function 的回答,他在那里发布的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);
};
}
【问题讨论】:
-
出于某种原因,我在第一条语句(var args = Array.prototype.slice.call(arguments).splice(1);)上遇到了问题,不得不改用它:var args =新数组(); for (var i = 1; i
-
以防万一有人需要这个:
Function.prototype.pass = function(){ var args=arguments, func = this; return function(){ func.apply(this,args);} };
标签: javascript pass-by-reference anonymous-function