以下代码给出了意外的结果。它只等待 1 秒延迟(而不是 delayBySeconds() 函数指定的 5 秒),然后打印输出,如下所示。
function func(){
const delaySeconds = 5;
console.log("Alpha");
setTimeout(()=> {console.log("Beta");}, 1000);
console.log("Gamma");
delayBySeconds(delaySeconds);
console.log(`${delaySeconds} seconds passed`);
}
function delayBySeconds(sec){
let start = now = Date.now();
while((now - start) < (sec * 1000)){
//console.log(now);
now = Date.now();
}
}
func();
输出:
"Alpha"
"Gamma"
"5 seconds passed"
"Beta"
此外,如果在 delayBySeconds() 中重新激活了 console.log(now),则延迟生效,否则在“Gamma”之后立即打印“5 秒过去”。另一个意想不到的结果是,如果不是 ()=> ,我只是在 setTimeout() 的参数中使用裸 console.log("Beta") ,“Beta”会在“Gamma”之前打印。有什么建议是什么原因造成的?