传递一个带参数的函数作为参数,但是它接受了调用函数的参数?

时间:2018-06-11 18:30:45

标签: javascript function

如何使这个例子有效?

这个想法是将两个函数作为参数传递,这两个函数接收函数的内部参数,并将它们作为参数接收。

function x(a, b, c){
    console.log(a + b + c);
}

function y(a, b, c){
    console.log(a + b + c);
}

function root(param, fn1, fn2){
    var a = a;
    var b = b;
    var c = c

    fn1(a,b,c);
    fn2(a,b,c);
}

root("pm", x(), y());

2 个答案:

答案 0 :(得分:1)

你可以将a,b,c的值作为一个数组传递,然后将函数x和y作为参数传递给你的函数

function x(a, b, c){
    console.log(a + b + c);
}

function y(a, b, c){
    console.log(a + b + c);
}

function root(param, fn1, fn2){
    var a = param[0];
    var b = param[1];
    var c = param[2];

    fn1(a,b,c);
    fn2(a,b,c);
}
root([1,2,3],x,y);

答案 1 :(得分:0)

我将其定义为:

function dual(fn1, fn2, ...params) { // a rest parameter
  fn1(...params); // spread arguments
  fn2(...params);
}

所以可以这样做:

dual(x, y, 1, 2, 3); // pass function references, not function results

只是为了好玩:你可以用无限量的功能实现这一点:

const combine = (...fns) => (...args) => fns.forEach(fn => fn(...args));

combine(x, x, z, z, z)(1, 2, 3)