传递带参数的函数

Passing a function with parameters

我想将一个带有参数的函数传递给另一个函数而不对其求值。

此方法无效:

function first (id) {...}

function second (func) {
    func();
} 

second(first(id)); 

这个方法可以,但我不能用它,因为参数的数量并不总是相同的:

function first (id) {...}

function second (func, id) {
    func(id);
}

second(first, someId);

创建包装函数:

second(function () { first(my, parameters); })

部分应用可以使用#bind

second( first.bind(null, id) )

如果您想将可变数量的参数传递给函数,您可以使用 apply,如下所示:

function runit(func, arrayofparam) {
   func.apply(this,arrayofparam);
}

所有这些文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

这个呢?

function func1(param1, param2){
    console.log("func1");
    console.log(param1);
    console.log(param2);
}

function func2(param1){
    console.log("func2");
    console.log(param1);
}

function executor(func, params) {
     //This do all the trick :)
     func.apply(this, params); 
}

executor(func1, ["first", "second"]);
executor(func2, ["lonely"]);

这是工作示例:https://jsfiddle.net/xrhkoL5a/(使用浏览器控制台查看结果)。