为何调用函数时会返回‘a is not a function’错误?
解决"a is not a function"错误问题
当执行console.log(invokeAdd(one(8), two))时会抛出a is not a function错误,但调用invokeAdd(one, two)时能正常输出3。
错误原因
one(8)是直接执行one函数,返回的是数值1,而非函数本身invokeAdd的逻辑是接收两个函数参数,分别调用后求和。当第一个参数传入数值1时,执行a()必然报错——数值无法作为函数被调用
解决方案
有两种常用方式修复这个问题:
- 用匿名函数包裹带参数的函数调用
把one(8)改成匿名函数,让它在invokeAdd内部被执行:
console.log(invokeAdd(() => one(8), two));
- 使用
bind绑定参数
通过bind创建一个预设参数的新函数,传递给invokeAdd:
console.log(invokeAdd(one.bind(null, 8), two));
两种方式都能让invokeAdd的第一个参数保持函数类型,执行时会调用one(8)得到1,加上two()得到的2,最终输出3。
内容的提问来源于stack exchange,提问作者Surya Keshub Misra
相关产品推荐
相关产品推荐

