Nam Nguyen
Nam Nguyen

Reputation: 5770

Javascript are these calls the same in Node.js?

I'm wondering if these two blocks of code are the same in Node.js?

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


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

Since above I'm passing 0 for the timeout, there should be no waiting time. Is it identical to just calling console.log('hello'); directly without using setTimeout?

Upvotes: 6

Views: 177

Answers (2)

Paul
Paul

Reputation: 141917

They are different, the first adds the function to the event queue, so that it can execute as soon as it gets a chance after the current execution path completes. The second will execute it immediately.

For example:

console.log('first');

setTimeout(function(){
  console.log('third');
}, 0);

console.log('second');

The order that those are printed in is well defined, you could even do something slow (but synchronous) before printing 'second'. It's guaranteed that console.log('second'); will still execute before the callback to setTimeout does:

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);

Upvotes: 8

Rocklan
Rocklan

Reputation: 8130

Strictly speaking they are not exactly the same - setTimeout gives the browser a chance to "catch up" with any tasks that it desperately needs to do. But as far as we're normally concerned, 99% of the time they will do the same thing.

Upvotes: -3

Related Questions