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"

また、console.log(now) が delayBySeconds() 内で再アクティブ化された場合、遅延が有効になります。それ以外の場合は、「Gamma」の直後に「5 秒経過」が出力されます。もう 1 つの予期しない結果は、()=> の代わりに、setTimeout() の引数に裸の console.log("Beta") を使用すると、"Beta" が "Gamma" の前に出力されることです。これを引き起こしている提案はありますか?

4

0 に答える 0