function useTime() {
for (var i=0;i<1000000000;i++) {
i++;
}
}
// --------------------------------
console.log(1);
useTime();
setTimeout('console.log(2)', 6000);
// --------------------------------
console.log(3);
useTime();
setTimeout('console.log(4)', 4000);
// --------------------------------
console.log(5);
useTime();
setTimeout('console.log(6)', 2000);
console.log(7);
// 执行顺序1-3-5-7-2-4-6
我对执行顺序没有异议。
关键是执行结果的时间引起了我的注意,上图:
先理解1-3-5-7的执行。
这里没有问题,执行循环体需要花费大约1秒
的时间。
再来看7-6
这里应该是转折点,可以看出从7-6花费2秒
时间,非常准确,因为我们设置的也是2秒
。
继续看6-4和4-2
唉幺,什么鬼哦,这怎么是1.2秒
哦,不应该是好好的设置的2秒
么。。
这是第一个问题,第二个问题是图上的VM458*
是什么东东?虚拟机么。。
一共两个问题,请知道的兄弟给兄弟指点一下,感激不尽。
首先useTime我测试执行时间

然后给你分析代码
首先 1 3 5 7没有解释的原因吧。
1是第一个加入到函数调用队列中的然后执行0.5秒左右的耗时函数开始进行第一个settimeout是6秒后执行,
然后输出3在执行0.5秒左右的耗时函数进行第二个settimeout函数4秒后执行这时在距离上一个只过去了0.5秒左右
接着是5在执行0.5秒左右的耗时函数第三个settimeout函数2秒之后执行这时距离第一个过去了1秒左右第二个过去了0.5秒左右
接着输出7,只是第一个还差5秒左右执行第二个还差3.5秒左右执行而第三个只差2秒执行
再有就是js是单线程的所以settimeout到时间后不会立刻执行得等执行队列为空的时候才执行
那个VM应该就是chrome的虚拟机了