在函数中传递一个参数,该函数由" reference"传递。在另一个功能

时间:2014-03-26 15:19:43

标签: javascript function pass-by-reference

好的,这有点难以解释,但我have created a fiddle在这里展示我想要完成的事情。

我认为这与How can I pre-set arguments in JavaScript function call? (Partial Function Application)有关,但我没有弄清楚如何将此帖中提到的方法应用到我的方案中。

我有三个功能。

  • func1的。传递给func2并由func2调用一次的函数 func2完成了它的业务。
  • FUNC2。作为参数接收函数的函数(func1) 它会打电话。
  • FUNC3。调用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);
}

2 个答案:

答案 0 :(得分:2)

您可以使用内联函数将传递给func2的函数包装起来。然后,它将调用委托给func1传递附加参数。

E.g:

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

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

答案 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在实践中的答案。请注意,他的回答并未对参数的顺序施加任何限制。