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
相关产品推荐
相关产品推荐

