You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将函数作为高阶函数参数传入时报错,反转参数顺序正常的原因

为什么反转transformer函数的参数顺序后,代码不再报错?

你遇到的Uncaught TypeError: firstUpper is not a function错误,本质是参数传递和函数定义不匹配导致的:

  • 原代码里transformer的参数定义是(string, firstUpper),但你调用它时只传了firstUpperCaseWord这一个参数。这会让string接收到firstUpperCaseWord函数,而firstUpper因为没传值变成undefined。当执行firstUpper(string)时,相当于试图调用undefined(它不是函数),自然抛出类型错误。

  • 反转transformer的参数顺序后,参数定义变成(firstUpper, string),此时如果你调用时传入firstUpperCaseWord和需要处理的字符串(比如transformer(firstUpperCaseWord, "hello world")),firstUpper会拿到firstUpperCaseWord函数,string拿到目标字符串,执行firstUpper(string)就变成了正常调用firstUpperCaseWord("hello world"),代码自然能正常运行。

你觉得参数顺序不该有影响,是忽略了JavaScript函数的参数匹配规则:函数是按位置顺序接收参数的,第一个实参对应第一个形参,第二个对应第二个,没传值的形参会默认是undefined。

错误代码逻辑演示

function transformer(string, firstUpper){
  // 调用时只传了firstUpperCaseWord,所以string = firstUpperCaseWord,firstUpper = undefined
  console.log(firstUpper(string)); // undefined不是函数,触发报错
}
transformer(firstUpperCaseWord);

修正后代码逻辑演示

function transformer(firstUpper, string){
  // firstUpper = firstUpperCaseWord,string = "hello world"
  console.log(firstUpper(string)); // 正常调用函数,输出处理后的字符串
}
transformer(firstUpperCaseWord, "hello world");

内容的提问来源于stack exchange,提问作者sanchit gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:26:30