代码示例
问题: 下面的代码输出是什么?为什么?
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没有setTimeoutB的设置超时为 0 毫秒A的设置超时为 1000 毫秒D必须请求数据库,之后必须等待 1000 毫秒,以便它来到A之后。C未知,因为未知何时请求数据库的数据。它可能是在 15 之前或之后。