代码示例

问题: 下面的代码输出是什么?为什么?

setTimeout(function() {
    console.log("A");
}, 1000);

setTimeout(function() {
    console.log("B");
}, 0);

getDataFromDatabase(function(err, data) {
    console.log("C");
    setTimeout(function() {
        console.log("D");
    }, 1000);
});

console.log("E");

输出: 这是肯定的:EBADC 在被记录时是未知的。

说明: 编译器不会停止在 setTimeoutgetDataFromDatabase 方法上。所以他将登录的第一行是 E。回调函数 setTimeout 的第一个参数) 将在异步方式设置超时后运行!

更多细节:

  1. E 没有 setTimeout
  2. B 的设置超时为 0 毫秒
  3. A 的设置超时为 1000 毫秒
  4. D 必须请求数据库,之后必须等待 1000 毫秒,以便它来到 A 之后。
  5. C 未知,因为未知何时请求数据库的数据。它可能是在 15 之前或之后。