此问题在此处已有答案:
What is the difference between a function call and function reference?(6个答案)
In JavaScript, does it make a difference if I call a function with parentheses?(5个答案)
9小时前关门了。
'当传递函数时,如果带参数,则返回一个错误,即a不是函数,而如果不带参数,则执行并给出output=3
function one(d) {
return 1;
}
function two() {
return 2;
}
function invokeAdd(a, b) {
return a() + b();
}
console.log(invokeAdd(one(8), two));
5条答案
按热度按时间14ifxucb1#
正如 Dai 所说 , 您 使用 函数 的 结果 作为 参数 , 使 参数 成为 数字 而 不是 函数 。 要 返回 函数 本身 , 请 使用 箭头 操作 符 使 其 调用 它 。
x1月 1 日
2w2cym1i2#
将函数传递给其他函数
让我们以下面的例子为例:
尝试注销这样的功能。
您将注意到,在控制台中,它将显示函数定义,因为这是
invokeAdd
变量存储的内容。现在,让我们尝试使用参数记录函数。
你会注意到你会得到
return value
,这个函数就是我们传递的argument
。所以当你尝试
console.log(invokeAdd(one(8), two));
时你的第一个参数实际上是传递one(8)
的结果而不是实际的函数。xwbd5t1u3#
当你运行one(8)时,你在执行一个没有传递它的函数,所以你传递给invokeAdd的是one(8)的结果。
尝试这样做:
wh6knrhe4#
这个函数有两个参数,它们应该是函数,而你所做的是给一个值和一个函数,而不是两个函数。
i2loujxw5#
因为你在传递参数本身的时候执行了函数“one”。因此这就是问题所在。下面是对相同问题的解释。
您已经将2个函数a和B作为参数传递给函数“invokeAdd”。
当函数“invokeAdd”执行时,在调用栈上,它期望“a”是函数,当我们使用括号(“()”)时,它执行。
现在,由于在调用函数“invokeAdd”时,我们执行了该函数,执行后的返回值是实际值,在此特定情况下为“1”。
而对于“B”,我们传递了函数引用,它在求和运算符被触发时执行。
希望这对你有帮助