これら 2 つのコード ブロックがNode.jsで同じであるかどうか疑問に思っています。
// Style 1
setTimeout(function () {
console.log('hello');
}, 0);
// Style 2
console.log('hello');
上記0
ではタイムアウトを渡しているため、待ち時間はありません。console.log('hello');
setTimeout を使用せずに直接呼び出すのと同じですか?
これら 2 つのコード ブロックがNode.jsで同じであるかどうか疑問に思っています。
// Style 1
setTimeout(function () {
console.log('hello');
}, 0);
// Style 2
console.log('hello');
上記0
ではタイムアウトを渡しているため、待ち時間はありません。console.log('hello');
setTimeout を使用せずに直接呼び出すのと同じですか?
それらは異なります。最初のものは関数をイベント キューに追加し、現在の実行パスが完了した後、機会があればすぐに実行できるようにします。2番目はすぐに実行します。
例えば:
console.log('first');
setTimeout(function(){
console.log('third');
}, 0);
console.log('second');
それらが印刷される順序は明確に定義されており、「秒」を印刷する前に何か遅い(ただし同期)こともできます。setTimeoutconsole.log('second');
へのコールバックが実行される前に実行されることが保証されています。
console.log('first');
setTimeout(function () {
console.log('third'); // Prints after 8 seconds
}, 0);
// Spinlock for 3 seconds
(function(start){ while(new Date - start < 3000); })(new Date);
console.log('second'); // Prints after 3 seconds, but still before 'third'
// Spinlock for 5 seconds
(function(start){ while(new Date - start < 5000); })(new Date);
厳密に言えば、それらはまったく同じではありません.setTimeoutは、ブラウザがどうしても実行する必要があるタスクに「追いつく」機会を与えます. しかし、私たちが通常考えている限り、99% の確率で彼らは同じことをします。