我正在学习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(新的排列)
答案 0 :(得分:-1)
这一开始并不容易理解,因为您认为在上述内容完成后必须执行的每个代码语句,但在JavaScript中它不是这样的即可。看看你的第二个例子,为什么console.log
里面的最后一个setTimeout
函数被打印出来了?这有点不对劲?不,这是JavaScript的本质。
要理解它,请认为它没有立即执行的所有功能它在后台执行。想象一下,在一条铁路高速公路上有交通拥堵,为什么不使用其他铁路?如果不使用其他车辆减少交通是愚蠢的,即使其他车辆比其他车辆低,它们也有助于减少交通量。虽然,尽管Javascript是异步的,但您可以设置同步性质,但就个人而言,我不推荐它。