【问题标题】:Can a function parameter be a function when called [duplicate]调用时函数参数可以是函数吗[重复]
【发布时间】:2020-10-21 15:28:37
【问题描述】:

我有两个功能:

const fn1 = (1, 2) => {
   //do something
}
const fn2 = ({param1, param2, param3}) => {
   $(`#id_one`).text(param1);
   $(`#id_two`).text(param2);
   param3;
}

调用函数:

fn2({
   param1: 'hello',
   param2: 'world',
   param3: fn1(1, 2)
});

当我调用上面的函数时,fn1() 在 fn2() 之前被调用。为什么会这样?我需要在 fn1() 之前通过 fn2()。

【问题讨论】:

  • 发生这种情况是因为必须解析fn1() 才能将属性分配给param3,这是创建传递给fn2 所需的对象。都是嵌套的。如果您解释为什么不需要调用 fn1 以及您通常要做什么,可能会更清楚。

标签: javascript jquery function ecmascript-6 parameters


【解决方案1】:

() 在指向函数的标识符调用函数之后。由于您想在 f2 中的所有内容完成后调用该函数,请将 ()s 放在 fn2 中,而不是在调用者中:

const fn2 = ({param1, param2, param3}) => {
   $(`#id_one`).text(param1);
   $(`#id_two`).text(param2);
   param3();
}
fn2({
   param1: 'hello',
   param2: 'world',
   param3: fn1
});

【讨论】:

  • 如果 fn1() 也有参数怎么办?抱歉应该在我的问题中提到这一点
  • 那你需要把那些放在():param3(1, 2)
  • @nb_nb_nb 如果它接受,比如说,12,那么我会通过:() => fn1(1, 2)(如果它们在调用者中定义,但不是在 fn2部分)
  • @Barmar,在 param3() 内?
  • @nb_nb_nb 取决于需要在哪里定义参数。如果在fn2 内,则使用答案中的代码,但将参数传递给param3。如果在fn2之外,则将() => fn1(1,2)作为参数传递给fn2
【解决方案2】:

您需要像这样将回调函数传递给 fn2:

fn2({
   param1: 'hello',
   param2: 'world',
   param3: fn1
});

然后像这样从 fn2 调用 fn1:

const fn2 = ({param1, param2, param3}) => {
   $(`#id_one`).text(param1);
   $(`#id_two`).text(param2);
   param3();
}

每当您使用括号时,都会立即调用该函数。

你现在的东 param3: fn1() 是说“param3 等于这个函数的返回值”,它运行 fn1() 来获取返回值,即使函数没有返回任何东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 2017-01-22
    • 2015-07-21
    • 2019-05-11
    • 1970-01-01
    相关资源
    最近更新 更多