javascript 为什么返回错误“a不是函数”?[duplicate]

vzgqcmou  于 2022-11-20  发布在  Java
关注(0)|答案(5)|浏览(221)

此问题在此处已有答案

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));
14ifxucb

14ifxucb1#

正如 Dai 所说 , 您 使用 函数 的 结果 作为 参数 , 使 参数 成为 数字 而 不是 函数 。 要 返回 函数 本身 , 请 使用 箭头 操作 符 使 其 调用 它 。
x1月 1 日

2w2cym1i

2w2cym1i2#

将函数传递给其他函数

让我们以下面的例子为例:

function invokeAdd(param) {
  return param;
}

尝试注销这样的功能。

function invokeAdd(param) {
  return param; 
}

console.log(invokeAdd)

您将注意到,在控制台中,它将显示函数定义,因为这是invokeAdd变量存储的内容。
现在,让我们尝试使用参数记录函数。

function invokeAdd(param) {
  return param;
}
console.log(invokeAdd("test"))

你会注意到你会得到return value,这个函数就是我们传递的argument
所以当你尝试console.log(invokeAdd(one(8), two));时你的第一个参数实际上是传递one(8)的结果而不是实际的函数。

xwbd5t1u

xwbd5t1u3#

当你运行one(8)时,你在执行一个没有传递它的函数,所以你传递给invokeAdd的是one(8)的结果。
尝试这样做:

function one(d) {
    return 1;
}
function two() {
    return 2;
}
function invokeAdd(a, b) {
    return a() + b();
}
console.log(invokeAdd(() => one(8), two));
wh6knrhe

wh6knrhe4#

function invokeAdd(a, b) {
return a() + b();
}

这个函数有两个参数,它们应该是函数,而你所做的是给一个值和一个函数,而不是两个函数。

console.log(invokeAdd(()=>one(8), two));
i2loujxw

i2loujxw5#

因为你在传递参数本身的时候执行了函数“one”。因此这就是问题所在。下面是对相同问题的解释。
您已经将2个函数a和B作为参数传递给函数“invokeAdd”。
当函数“invokeAdd”执行时,在调用栈上,它期望“a”是函数,当我们使用括号(“()”)时,它执行。
现在,由于在调用函数“invokeAdd”时,我们执行了该函数,执行后的返回值是实际值,在此特定情况下为“1”。
而对于“B”,我们传递了函数引用,它在求和运算符被触发时执行。
希望这对你有帮助

相关问题