请指出我在学习异步Javascript时的错误之处

请指出我在学习异步Javascript时的错误之处,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我不熟悉Javascript和同步编程,有一些事情让我困惑,请指出我学习中的错误 异步函数的回调放在消息队列中,然后 通过事件循环执行 异步执行是非阻塞的,已完成 通过事件循环 像setTimeout这样的函数是异步的 异步函数是阻塞的,只有它们的回调是阻塞的 非阻塞 如果以上任何一项是错误的,请详细说明 异步函数的回调放在消息队列中,并通过事件循环执行 只是在队列中(没有消息)。我想你说的异步函数是指承诺。记住async和await是承诺的语法糖。它们由事件循环执行 异步执行是非阻塞的,通

我不熟悉Javascript和同步编程,有一些事情让我困惑,请指出我学习中的错误

  • 异步函数的回调放在消息队列中,然后 通过事件循环执行
  • 异步执行是非阻塞的,已完成 通过事件循环
  • setTimeout
    这样的函数是异步的
  • 异步函数是阻塞的,只有它们的回调是阻塞的 非阻塞
如果以上任何一项是错误的,请详细说明

异步函数的回调放在消息队列中,并通过事件循环执行

只是在队列中(没有消息)。我想你说的异步函数是指承诺。记住
async
await
是承诺的语法糖。它们由事件循环执行

异步执行是非阻塞的,通过事件循环完成

不是真的。Javascript是单线程的:无论何时开始执行异步代码,只要需要,它就会一直保持在那里,除非您使用worker

setTimeout之类的函数是异步的

与Promise类似,
setTimeout
和similar将回调放入队列中,该队列将在事件循环中的某个位置执行(对于每种异步函数,其行为可能不同)

异步函数是阻塞的,只有它们的回调是非阻塞的

对!

异步函数的回调放在消息队列中,并通过事件循环执行

只是在队列中(没有消息)。我想你说的异步函数是指承诺。记住
async
await
是承诺的语法糖。它们由事件循环执行

异步执行是非阻塞的,通过事件循环完成

不是真的。Javascript是单线程的:无论何时开始执行异步代码,只要需要,它就会一直保持在那里,除非您使用worker

setTimeout之类的函数是异步的

与Promise类似,
setTimeout
和similar将回调放入队列中,该队列将在事件循环中的某个位置执行(对于每种异步函数,其行为可能不同)

异步函数是阻塞的,只有它们的回调是非阻塞的

对!

异步函数的回调放在消息队列中,并通过事件循环执行

否。

通常有两种异步函数——一种是在完成时运行某种回调函数,另一种是产生承诺函数

基于回调的函数 这是一个基于回调函数的示例:

setTimeout(()=>console.log(“foo”),0);
控制台日志(“bar”);
/*输出:
酒吧
福
*/
异步函数的回调放在消息队列中,并通过事件循环执行

否。

通常有两种异步函数——一种是在完成时运行某种回调函数,另一种是产生承诺函数

基于回调的函数 这是一个基于回调函数的示例:

setTimeout(()=>console.log(“foo”),0);
控制台日志(“bar”);
/*输出:
酒吧
福

*/
JS线程中执行的所有操作都是阻塞的,始终如此。只是异步执行的实际任务不是由JS执行的,而是在执行回调时阻塞了线程。异步函数不是blocking@JaredSmith什么!?文件系统执行的任务或其他任何任务都没有阻塞,但JS是在单个线程中执行的,它肯定总是阻塞任何其他JS执行。@Teemu这就是为什么需要更清晰的解释。如果在异步函数中放入
wait
,则执行不会停止并等待。控件将直接通过函数的return语句传递,我相信您知道,它实际上在微任务队列中注册了一个回调。在这一点上,人们有很多困惑(到目前为止的答案也有争议)。@JaredSmith是的,JS在注册完成之前一直处于阻塞状态(虽然时间很短),当然,只要有东西要执行,就继续执行它的线程。在JS线程中执行的每件事情都是阻塞的,总是这样。只是异步执行的实际任务不是由JS执行的,而是在执行回调时阻塞了线程。异步函数不是blocking@JaredSmith什么!?文件系统执行的任务或其他任何任务都没有阻塞,但JS是在单个线程中执行的,它肯定总是阻塞任何其他JS执行。@Teemu这就是为什么需要更清晰的解释。如果在异步函数中放入
wait
,则执行不会停止并等待。控件将直接通过函数的return语句传递,我相信您知道,它实际上在微任务队列中注册了一个回调。在这一点上,人们有很多困惑(到目前为止的答案中也有争议)。@JaredSmith是的,JS正在阻止,直到注册完成(虽然时间很短),当然,只要有东西要执行,就继续执行它的线程。执行回调会阻止和执行任何JS函数一样。这取决于你所说的阻止异步函数和它们的回调是什么意思,否则它们都是阻止的。我只是想通过
回调
理解为
调用它们
或者,更好的是
将它们添加到事件循环中的某个队列中
。执行回调将阻塞以及执行任何JS函数。根据您所说的阻塞异步函数及其回调的意思,其他函数都是阻塞。我只是想通过
回调
理解为
调用它们
或,更好的是
将它们添加到事件循环中的某个队列中