关于javascript - 异步调用,这两个程序执行的区别?

时间:2016-10-16 11:38:28

标签: javascript asynchronous

我正在学习javascript中的异步调用。顺便说一下,这两个令人困惑!

今天我写了这两个程序,结果不一样。有人可以解释深度差异。

setTimeout(function(){console.log(5)},5);
console.log(55);
setTimeout(function(){console.log(4)},4);
console.log(44);
setTimeout(function(){console.log(2)},2);
console.log(22);
setTimeout(function(){console.log(3)},3);
console.log(33);

和 -

setTimeout(function(){console.log(5)},5000);
console.log(55);
setTimeout(function(){console.log(4)},4000);
console.log(44);
setTimeout(function(){console.log(2)},2000);
console.log(22);
setTimeout(function(){console.log(3)},3000);
console.log(33);

唯一的区别是他们的超时持续时间。我也试过 数百 数十 ,您也可以尝试。

我猜,他们的输出可能取决于CPU速度和许多其他因素。

我是从第一个那里得到的......执行here

55
44
22
33
5
2
3
4 

从第二个......(如预期的那样)

55
44
22
33
2
3
4
5

谢谢!

编辑:后来,对于第一个代码片段,我也在Ubuntu中试过 - nodejs - v5.12.0

我得到了5 4 2 3(新的排列)

1 个答案:

答案 0 :(得分:-1)

这一开始并不容易理解,因为您认为在上述内容完成后必须执行的每个代码语句,但在JavaScript中它不是这样的即可。看看你的第二个例子,为什么console.log里面的最后一个setTimeout函数被打印出来了?这有点不对劲?不,这是JavaScript的本质。

要理解它,请认为它没有立即执行的所有功能它在后台执行。想象一下,在一条铁路高速公路上有交通拥堵,为什么不使用其他铁路?如果不使用其他车辆减少交通是愚蠢的,即使其他车辆比其他车辆低,它们也有助于减少交通量。虽然,尽管Javascript是异步的,但您可以设置同步性质,但就个人而言,我不推荐它。