JavaScript回调函数中的替代方法以及如何使用它们

时间:2017-04-21 16:36:56

标签: javascript json javascript-events

好的朋友们!我知道stackoverflow中的方向是问你想要什么,并没有证明你希望它如何完成,但我真的不知道如何以更好的方式提出它并且我不是一个javascript专家..那么......我们走吧!

让我们假设我们有以下javascript函数及其各自的输出......

function func_a(param_a, param_b, param_c) {
    alert(param_a);
    alert(param_b);
    alert(param_c);
}

function func_b(func_to_run) {

    // Will call "func_a" HERE!
    func_to_run("a", "b", "c");
}

func_b(func_a);

// a
// b
// c

我的问题是:

是否有正确和/或更好的方法将参数传递给函数" func_a"当我们将它作为函数" func_b"?

的参数传递时

如何将参数传递给函数" func_a"在函数" func_b"呼叫?下面我会给你一个假设的示例...

function func_a(param_a, param_b, param_c) {
    alert(param_a);
    alert(param_b);
    alert(param_c);
}

function func_b(func_to_run) {
    func_b_param = "z";

    // Will call "func_a" HERE!
    func_to_run(value_from_func_b_call, value_from_func_b_call, func_b_param);
}

// Third parameter deliberately empty!
func_b(func_a("a", "b", ));

// a
// b
// z

我不知道我是否清楚地解释了它!如果有任何疑问或建议改进,请告诉我!

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以将参数传递给func_b:

function func_a(param_a, param_b, param_c) {
    alert(param_a);
    alert(param_b);
    alert(param_c);
}

function func_b(func_to_run, param1, param2) {
    func_b_param = "z";

    // Will call "func_a" HERE!
    func_to_run(param1, param2, func_b_param);
}

// Third parameter deliberately empty!
func_b(func_a, "a", "b");

虽然这是一个快速而肮脏的答案,但如果我们更好地了解你想要实现的目标,那么可能会有更好的答案。特别是使用新的ES6语法和扩展运算符。

答案 1 :(得分:1)

这是你在找什么?

contentInset

答案 2 :(得分:1)

  

如何将参数传递给函数" func_a"在功能中   " func_b"调用

如果正确解释问题,您可以将对象传递给func_b作为参数,其中属性设置为1)要调用的函数; 2)将参数作为数组传递给函数调用; 3)在传递给调用的函数内调用的函数。

您可以使用Reflect.apply()调用外部函数来调用,可选择在外部函数中设置this;传递和数组,第一个元素是内部函数,例如调用func_b,第二个元素是调用函数的参数,前面是spread元素。

调用外部函数的第一个参数定义一个表示要调用的内部函数的参数;在第二个参数中定义rest参数func_a,表示传递给要调用的内部函数的参数。



function func_a(fn, ...args) {
  for (let arg of args) fn(arg)
}

function func_b(func_to_run) {
  // Will call "func_a" HERE!
  Reflect.apply(func_to_run.fn, null, [func_to_run.innerFn, ...func_to_run.args]);
}

func_b({
  fn: func_a,
  innerFn: alert,
  args: ["a", "b", "c"]
});