代码示例
问题: 下面的代码输出是什么?为什么?
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 之前或之后。