javascript 中回调函数的混淆

Confusion in callback function in javascript

提问人:Aniruddhsinh 提问时间:10/26/2023 更新时间:10/26/2023 访问量:48

问:

enter image description hereenter image description here我对javascript中的回调函数执行感到困惑。我不确定它的执行流程是什么。我们的异步代码在调用堆栈中 javasript 中的 main 函数之后执行。

我在同步函数(add)中使用了异步函数(setTimeout()),当我直接从异步函数返回值时(不使用回调,即返回a + b),它什么也没返回。而当我从异步函数(callback(a+b))调用回调函数时,它将返回实际的总和,这是正确的。

所以,我很困惑,如果我们的异步函数在调用堆栈中的主函数之后运行,那么我们的回调函数在那之后是如何执行的。

JavaScript 节点.js 回调 mern

评论

0赞 Rahul Sharma 10/26/2023
这是 javascript 中的预期行为,为了更好地理解,您应该了解 javascript EVENT LOOP 的工作原理。youtube.com/watch?v=xof_TiENzXE
1赞 Yousaf 10/26/2023
请直接在问题中包含您的代码,而不是分享代码的图像。
0赞 jfriend00 10/26/2023
不要将代码放入图像中。这使得在移动设备上难以阅读,使视力障碍者难以阅读,使代码无法被搜索索引,使提供答案的人无法将代码复制/粘贴到答案中,等等......不要将代码放入图像中。将代码粘贴为文本,并在编辑器中将其正确格式化为代码。您现在可以使用问题下方的“编辑”链接来解决您的问题。
0赞 jfriend00 10/26/2023
您是从 setTimeout 回调返回的,而不是从您的函数返回的。该回调将在函数返回很久之后调用。这是因为它是异步和非阻塞的。另外,在您的第一个版本中,没有任何内容会调用回调。return a+badd()setTimeoutadd()setTimeout()add()
0赞 jfriend00 10/26/2023
@RahulSharma - 与其说是事件循环是如何工作的,不如说是非阻塞的异步函数在 Javascript 中是如何工作的。是的,它们使用事件循环,但你不需要对事件循环了解太多,而是需要了解什么是非阻塞异步函数,它是如何工作的,以及它何时调用它的回调。

答: 暂无答案