JavaScript是这些调用相同的Node.js?

我想知道如果这两个代码块在Node.js是相同的?

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

由于上面我传递0超时,应该没有等待时间。 和调用console.log('hello');是一样的console.log('hello'); 直接不用setTimeout?

它们是不同的,第一个将函数添加到事件队列中,以便在当前执行path完成之后立即执行它。 第二个将立即执行。

例如:

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

这些打印的顺序是明确的,你甚至可以在打印“第二”之前做一些缓慢的事情(但同步)。 保证console.log('second'); 仍然会在setTimeoutcallback之前执行:

 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%的时间他们会做同样的事情。