程式碼示例
問題: 下面的程式碼輸出是什麼?為什麼?
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");
輸出: 這是肯定的:EBAD
。C
在被記錄時是未知的。
說明: 編譯器不會停止在 setTimeout
和 getDataFromDatabase
方法上。所以他將登入的第一行是 E
。回撥函式 (setTimeout
的第一個引數) 將在非同步方式設定超時後執行!
更多細節:
E
沒有setTimeout
B
的設定超時為 0 毫秒A
的設定超時為 1000 毫秒D
必須請求資料庫,之後必須等待 1000 毫秒,以便它來到A
之後。C
未知,因為未知何時請求資料庫的資料。它可能是在 15 之前或之後。