0

以下代码给出了意外的结果。它只等待 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”之前打印。有什么建议是什么原因造成的?

4

0 回答 0