因为i是一个以上用户访问的全局变量,那么在user1执行完所有代码之后,user2是否会启动? 如何工作Node.js单线程?
输出:
6
A
承诺{未定义}
7
7
er
var i=5;
async function a(){
i++;
setTimeout(()=>{
console.log(i);
})
console.log(i);
setTimeout(()=>{
console.log(i);
})
i++;
}
async function b(){
console.log('a');
setTimeout(()=>{
console.log("er");
})
}
a();
b();
当我们调用一个()。 函数a()被添加到堆栈中。 在()中有setTimeout,它应该由web API处理,web API负责处理它。 然后它在堆栈中看到console.log(i),并打印console.log。 接下来,还有另一个setTimeout,它也被处理到web API。 随后,函数b()被推送到堆栈,它在堆栈中找到console.log(“a”)并进行日志记录,然后找到setTimeout并被推送到web API。 堆栈为空后,它通常返回未定义,但这里函数是异步的,因此它返回未定义的承诺。 稍后,当事件队列看到堆栈为空时,它会在setTimeout内部分配代码加载到堆栈中,然后执行,执行后弹出。