程式碼示例

問題: 下面的程式碼輸出是什麼?為什麼?

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 之前或之後。