在一个函数中传递一个参数,该参数在另一个函数中通过“引用”传递

问题描述 投票:0回答:3

好吧,这有点难以解释,但我在这里创建了一个小提琴来演示我想要完成的任务。

我认为这与如何在JavaScript函数调用中预先设置参数有关? (部分功能应用),但我无法弄清楚如何将本文中提到的方法应用到我的场景中。

我有三个功能。

  • 功能1。传递给 func2 并被 func2 调用一次的函数 func2 已经完成了它的任务。
  • 函数2。接收函数 (func1) 作为参数的函数 它会打电话来。
  • 功能3。调用 func2 的函数。

我想将一个参数传递给 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);
}
javascript function pass-by-reference
3个回答
2
投票

您可以使用内联函数包装传递给

func2
的函数。然后将调用委托给
func1
并传递附加参数。

例如:

function func3a(aBool) {
  func2(function(data) {
    func1(data, aBool);
  });
}

http://jsbin.com/qamigura/1/


2
投票

您不仅可以使用

Function.prototype.bind
绑定函数执行的上下文 (
this
),还可以绑定调用函数时使用的第一个参数。

func3 = function (aBool) {
    func2(func1.bind(null,aBool));
}


func1 = function(myBool, data) {
    alert(data[0] + ' ' + myBool);
}

请注意,我必须更改 func1 的签名才能将布尔值作为第一个参数,以便 func2 在调用它时可以设置第二个参数。

bind
的实现与实践中Yoshi的答案类似。请注意,他的答案不会对参数的顺序施加任何限制。


0
投票

另一个想法,希望有帮助:

函数 show(str) { console.log(str); }

功能测试(muFunction) {

  muFunction();

}

测试(显示);

© www.soinside.com 2019 - 2024. All rights reserved.