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

时间:2017-10-08 13:07:35

标签: javascript asynchronous callback

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

代码:



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

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

doSomething(foo);

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

console.log("after");




目前的知识:

doSomething的回调不是异步操作,因此它不会放在回调队列中。但是,setTimeout是一个异步操作,因此放在回调队列中。因为在javascript线程完成后调用了回调队列,所以最后调用setTimeout()函数。

问题:

  1. 我目前的理解是否正确?
  2. 究竟是什么使操作成为异步操作?这是因为Javascript本身有某些默认是异步的操作吗?
  3. 您是否可以在javascript中自行进行异步操作,而无需使用setTimeout()之类的内置异步操作?

1 个答案:

答案 0 :(得分:2)

  

我目前的理解是否正确?

是的,它将按顺序执行这些功能。由于您在定义doSomething之前致电setTimeout,因此会先完成。{/ p>

  

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

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

  

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

过去并不那么容易。正如我所说,您可以制作自定义事件和Web工作者。如今: