关于setTimeout的延时参数

各位大佬,小弟请问个问题:
以下代码为什么输出结果是1,4,3,2,而不是1,4,2,3
js主线程从上至下执行时,碰到异步代码,会将其插入到任务队列,任务队列里应该是1000的在0的前面,还是说setTimeout第二个参数就是延时多长时间将其插入到任务队列?

console.log(1);

setTimeout(function () {

    console.log(2);

}, 1000);

setTimeout(function () {

    console.log(3);

}, 0);

console.log(4);

结果:

https://img1.mukewang.com/5bcd3a0e00012a6902770168.jpg

慕少森
浏览 756回答 2
2回答

互换的青春

console.log(1);//最先执行setTimeout(function () {    console.log(2);//这个没什么好说的,1秒后执行,最后一个}, 1000);setTimeout(function () {    console.log(3);//定时器有延时,虽然设置了0,代表0秒后就执行,但是实际是有一定延时的,接近0而已,相当于异步,所以要等同步执行的执行完才轮到它,所以第三}, 0);console.log(4);//第二执行

Qyouu

题主似乎对js的任务队列有误解,就是因为js是单线程的,才有的这个任务队列机制,但任务队列并不是单线程的,可以多任务同步执行 [由浏览器实现]。所以你的2个setTimeout基本是同时委托浏览器异步执行计时操作,浏览器根据你设定的时间调用回调函数,肯定是设置为0的那个先触发了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript