6

これら 2 つのコード ブロックがNode.jsで同じであるかどうか疑問に思っています。

// Style 1
setTimeout(function () {
  console.log('hello');
}, 0);


// Style 2
console.log('hello');

上記0ではタイムアウトを渡しているため、待ち時間はありません。console.log('hello');setTimeout を使用せずに直接呼び出すのと同じですか?

4

2 に答える 2

8

それらは異なります。最初のものは関数をイベント キューに追加し、現在の実行パスが完了した後、機会があればすぐに実行できるようにします。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);
于 2013-09-13T06:56:04.557 に答える
-3

厳密に言えば、それらはまったく同じではありません.setTimeoutは、ブラウザがどうしても実行する必要があるタスクに「追いつく」機会を与えます. しかし、私たちが通常考えている限り、99% の確率で彼らは同じことをします。

于 2013-09-13T06:54:19.010 に答える