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

JavaScript回调函数callback执行后返回值为undefined问题咨询

问题原因
  • 自定义回调函数goodMorning的入参要求为2个(name、msg),但在greet函数内调用cb时每次仅传入1个参数,JS中函数未收到显式传值的形参会被默认赋值为undefined,因此返回的拼接结果会携带undefined。
  • 调用逻辑不符合函数设计预期:goodMorning的作用是拼接姓名和问候语两个字段,需要同时传入两个参数才能得到正确结果,拆分两次调用回调、每次仅传单个参数的写法本身不符合设计逻辑。
修复方案

方案1:调整回调调用逻辑(推荐)

不需要拆分两次调用回调,直接将name和msg两个参数一次性传入回调即可:

function goodMorning(name, msg) {
  return `${name} ${msg}`;
}

function greet(name, msg, cb) {
  const myName = "Sairam";
  // 单次调用回调,传入两个所需参数
  console.log(`${cb(name, msg)} i am ${myName}`);
}

greet("Suvarna", "Good Morning", goodMorning);

运行输出结果为:Suvarna Good Morning i am Sairam

方案2:调整回调函数的参数定义

如果业务需求确实需要两次调用回调、分别处理姓名和问候语,可以修改goodMorning的入参规则,仅保留单个参数:

// 仅接收单个内容参数
function goodMorning(content) {
  return content;
}

function greet(name, msg, cb) {
  const myName = "Sairam";
  console.log(`${cb(name)} ${cb(msg)} i am ${myName}`);
}

greet("Suvarna", "Good Morning", goodMorning);

运行输出结果与方案1一致。

内容的提问来源于stack exchange,提问作者Dev G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:33:03