如何在调用含嵌套匿名函数的JS函数时获取返回值?
问题解决思路
首先你的核心问题有两个:一是myFunction没有执行传入的回调函数,二是如果涉及异步操作,同步代码的执行时机早于回调完成。
同步场景下的解决方法
先修正myFunction,确保它调用传入的回调:
function myFunction(a, callback) { // 执行回调,可根据需求传递参数 callback(a); }
然后提前声明变量c,确保回调执行后再访问(同步回调会立即执行,所以后续代码能拿到值):
let c; myFunction('test', function(test){ c = 'result'; }); console.log('value c ' + c); // 输出:value c result
你之前的写法无效,是因为myFunction没有返回值,所以var c = myFunction(...)得到的是undefined,而且原myFunction里根本没执行回调,c根本不会被赋值。
异步场景下的解决方法
如果回调是异步执行的(比如包含setTimeout、AJAX请求等),同步代码会先运行,这时候需要用Promise配合async/await来等待异步操作完成:
// 把myFunction改成返回Promise的形式 function myFunction(a) { return new Promise((resolve) => { // 模拟异步操作,比如接口请求 setTimeout(() => { resolve('result'); }, 1000); }); } // 使用async/await等待异步结果 async function getCValue() { const c = await myFunction('test'); console.log('value c ' + c); // 1秒后输出:value c result } getCValue();
内容的提问来源于stack exchange,提问作者irkprin
相关产品推荐
相关产品推荐

