Javascript是这些调用在Node.js中是一样的吗?

时间:2013-09-13 06:48:34

标签: javascript node.js express

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

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


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

从上面我传递0超时,应该没有等待时间。是否与不使用setTimeout直接调用console.log('hello');相同?

2 个答案:

答案 0 :(得分:8)

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

例如:

console.log('first');

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

console.log('second');

打印出来的顺序很明确,你甚至可以在打印'秒'之前做一些慢(但同步)的事情。保证console.log('second');在回复setTimeout之前仍会执行:

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

答案 1 :(得分:-3)

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