Javascript,回调函数什么时候进入事件队列?

Wil*_*een 4 javascript asynchronous callback

真的很想了解javascript的事件队列。我目前的理解如下。

代码:

let doSomething = (callback) => {
callback("first");
};

let foo = (text) => {
    console.log(text);
};

doSomething(foo);

setTimeout(() => {
    console.log("hey");
});

console.log("after");
Run Code Online (Sandbox Code Playgroud)

目前的知识:

doSomething 的回调不是异步操作,因此不会放入回调队列中。然而,setTimeout 是一个异步操作,因此将 this 放入回调队列中。因为回调队列是在 JavaScript 线程结束后调用的,所以该setTimeout()函数是最后调用的。

问题:

  1. 我现在的理解正确吗?
  2. 究竟是什么使操作成为异步操作?这是因为 Javascript 本身有某些默认情况下是异步的操作吗?
  3. 您可以在 javascript 中自己进行异步操作,而不使用像 这样的内置异步操作吗setTimeout()

Mou*_*ser 5

我现在的理解正确吗?

是的,它将按顺序执行这些功能。由于您doSomething在定义之前调用,因此setTimeout它将首先完成。

究竟是什么使操作成为异步操作?这是因为 Javascript 本身有某些默认情况下是异步的操作吗?

当代码的执行不停止主线程的执行时,它是异步的。JavaScript 是单线程的。xmlHTTPRequests间隔超时是异步函数的示例。事件也是异步的。但正如你所说,它们都是内置的。

您可以在 javascript 中自己进行异步操作,而不使用像 setTimeout() 这样的内置异步操作吗?

在过去并不那么容易。正如我所说,您可以创建自定义事件和网络工作人员。如今: