次のコードは、予期しない結果をもたらします。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" の前に出力されることです。これを引き起こしている提案はありますか?