函数参数可以在调用时为函数吗

时间:2020-10-21 15:28:37

标签: javascript jquery function ecmascript-6 parameters

我有2个功能:

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()之前被调用。为什么会这样呢?我需要先经过fn2(),然后再进行fn1()。

2 个答案:

答案 0 :(得分:3)

指向功能的标识符后面的

()会调用该功能。由于您想在完成f2中的所有操作后调用该函数,因此请将()放在fn2中,而不要放在调用方中:

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

答案 1 :(得分:1)

您需要像这样将回调函数传递给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()来获取返回值。