好吧,这有点难以解释,但我在这里创建了一个小提琴来演示我想要完成的任务。
我认为这与如何在JavaScript函数调用中预先设置参数有关? (部分功能应用),但我无法弄清楚如何将本文中提到的方法应用到我的场景中。
我有三个功能。
我想将一个参数传递给 func3,该参数在 func2 中传递给 func1。
例如:
<input type='button' id='testButton' onclick='func3()' value='Click Me' />
<input type='button' id='testButton2' onclick='func3a(true)' value='Click Me Also' />
func3 = function (aBool) {
func2(func1);
}
// I want to be able to pass a parameter to the function
// that gets called in func2
func3a = function (aBool) {
func2(func1(aBool));
}
func1 = function (data, myBool) {
alert(data[0] + ' ' + myBool);
}
// Cannot Change this function
func2 = function (func) {
var data = [];
data[0] = "Hello World"
func(data);
}
您可以使用内联函数包装传递给
func2
的函数。然后将调用委托给 func1
并传递附加参数。
例如:
function func3a(aBool) {
func2(function(data) {
func1(data, aBool);
});
}
Function.prototype.bind
绑定函数执行的上下文 (this
),还可以绑定调用函数时使用的第一个参数。
func3 = function (aBool) {
func2(func1.bind(null,aBool));
}
func1 = function(myBool, data) {
alert(data[0] + ' ' + myBool);
}
请注意,我必须更改 func1 的签名才能将布尔值作为第一个参数,以便 func2 在调用它时可以设置第二个参数。
bind
的实现与实践中Yoshi的答案类似。请注意,他的答案不会对参数的顺序施加任何限制。
另一个想法,希望有帮助:
函数 show(str) { console.log(str); }
功能测试(muFunction) {
muFunction();
}
测试(显示);