各位大佬,小弟请问个问题:
以下代码为什么输出结果是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);
结果:
题主似乎对js的任务队列有误解,就是因为js是单线程的,才有的这个任务队列机制,但任务队列并不是单线程的,可以多任务同步执行 [由浏览器实现]。
所以你的2个
setTimeout
基本是同时委托浏览器异步执行计时操作,浏览器根据你设定的时间调用回调函数,肯定是设置为0的那个先触发了