第一种情况:setTimeout先2秒,后3秒
console.log('时间点s',Date.now())
setTimeout(function(){console.log('时间点1',Date.now())},2000)
setTimeout(function(){console.log('时间点2',Date.now())},3000)
var aa=0
for(var i=0;i<999999999;i++){
//该for循环耗时30秒
aa=i*i+aa
}
console.log('时间点e',Date.now())
第2种情况:先3秒后2秒
console.log('时间点s',Date.now())
setTimeout(function(){console.log('时间点1',Date.now())},3000)
setTimeout(function(){console.log('时间点2',Date.now())},2000)
var aa=0
for(var i=0;i<999999999;i++){
//该for循环耗时30秒
aa=i*i+aa
}
console.log('时间点e',Date.now())
第3种情况,加入了时间点3和4
console.log('时间点s',Date.now())
setTimeout(function(){console.log('时间点1',Date.now())},3000)
setTimeout(function(){console.log('时间点2',Date.now())},2000)
var aa=0
for(var i=0;i<999999999;i++){
//该for循环耗时30秒
aa=i*i+aa
}
console.log('时间点e',Date.now())
setTimeout(function(){console.log('时间点3',Date.now())},2000)
setTimeout(function(){console.log('时间点4',Date.now())},3000)
下图,时间点e和时间点3相差2秒,时间点e和时间点4相差3秒
第4种情况,加入了时间点3和4,只是时间被修改
console.log('时间点s',Date.now())
setTimeout(function(){console.log('时间点1',Date.now())},3000)
setTimeout(function(){console.log('时间点2',Date.now())},2000)
var aa=0
for(var i=0;i<999999999;i++){
//该for循环耗时30秒
aa=i*i+aa
}
console.log('时间点e',Date.now())
setTimeout(function(){console.log('时间点3',Date.now())},3000)
setTimeout(function(){console.log('时间点4',Date.now())},2000)
总结:当先有setTimeout,后有耗时操作,并且耗时操作比setTimeout时间长,那么当耗时操作一结束,之前的setTimeout就立刻执行,不会再等待setTimeout里的时间。