Javascript这些调用在Node.js中是否相同?

Javascript这些调用在Node.js中是否相同?,javascript,node.js,express,Javascript,Node.js,Express,我想知道这两段代码在Node.js中是否相同 // Style 1 setTimeout(function () { console.log('hello'); }, 0); // Style 2 console.log('hello'); 因为上面我传递了超时的0,所以应该没有等待时间。它是否与只调用console.log('hello')相同而不使用setTimeout?严格来说,它们并不完全相同-setTimeout让浏览器有机会“赶上”它迫切需要完成的任何任务。但就我们通常而言

我想知道这两段代码在Node.js中是否相同

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


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

因为上面我传递了超时的
0
,所以应该没有等待时间。它是否与只调用
console.log('hello')相同而不使用setTimeout?

严格来说,它们并不完全相同-setTimeout让浏览器有机会“赶上”它迫切需要完成的任何任务。但就我们通常而言,99%的时间它们都会做相同的事情。

它们不同,第一个将函数添加到事件队列中,以便在当前执行路径完成后有机会立即执行。第二个将立即执行它

例如:

console.log('first');

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

console.log('second');
这些文件的打印顺序定义得很好,您甚至可以在打印“秒”之前执行一些缓慢(但同步)的操作。保证
console.log('second')仍将在回调执行以下操作之前执行:

console.log('first');
setTimeout(函数(){
console.log('third');//8秒后打印
}, 0);
//旋转锁定3秒
(函数(开始){while(新日期-开始<3000);})(新日期);
console.log('second');//3秒后打印,但仍在“第三”之前
//旋转锁定5秒
(函数(开始){while(新日期-开始<5000);})(新日期);

@Quentin这会对Node.js特定的节点有什么影响吗?@Quentin,那么你是说我的Node.js中的setTimeout 0是相同的吗?谢谢你的反馈是的。Node.js会像对待JavaScript一样对待JavaScript。@NamNguyen是的,Node.js和web browsers.ic也是如此,谢谢。所以这两个函数是不同的,无论是web还是node.js。有趣,学习新事物!好东西。脚本的结果将按以下顺序打印:第一、第二和第三。值得一提的是,如果您只需要上面描述的行为(在Node.js上),它将是
setTimeout(…,0)
的更有效的替代方法,因为它不涉及计时器调度的开销。
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);