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

咨询:JavaScript回调函数调用后输出undefined的原因

为什么第二个代码会输出undefined?

嘿,这个问题其实是函数返回值的典型细节问题,咱们一步步理清楚~

首先看你的第一个代码片段:

var myCallback = function(data) { console.log( 'got data: '+data); };
var usingItNow = function(callback) { callback('get it?'); };
usingItNow(myCallback);

这里myCallback的作用是直接在内部执行console.log输出内容,usingItNow只是调用了这个回调函数,虽然usingItNow本身没有返回值,但你并没有去打印它的返回结果,所以控制台直接输出了回调里的内容,符合预期。

再看第二个出问题的代码:

var myCallback = function(data) { return 'got data: '+data; };
var usingItNow = function(callback) { callback('get it?'); };
console.log(usingItNow(myCallback));

问题出在**usingItNow函数本身没有返回值**——它确实调用了callback('get it?'),也拿到了回调返回的字符串got data: get it?,但它没有把这个值通过return传递出去。在JavaScript里,任何函数如果没有显式写return语句,默认都会返回undefined。

所以当你执行console.log(usingItNow(myCallback))时,实际上是在打印usingItNow的返回值,也就是undefined,而回调返回的字符串根本没被用到。

修正方案

只需要让usingItNow把回调的返回值返回出来就行:

var myCallback = function(data) { return 'got data: '+data; };
var usingItNow = function(callback) { 
  // 把回调的返回值return出去
  return callback('get it?'); 
};
console.log(usingItNow(myCallback)); // 现在会输出 "got data: get it?"

简单总结一下:回调函数的返回值是否能被外部使用,完全取决于调用它的函数(也就是这里的usingItNow)有没有主动把这个返回值传递出来~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:27:16