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

