首页 > 试题广场 > 下面这段代码: console.log(1); let a
[单选题]
下面这段代码:
console.log(1);
let a = setTimeout(() => {console.log(2)}, 0);
console.log(3);
Promise.resolve(4).then(b => {
console.log(b);
clearTimeout(a);
});
console.log(5);


控制台的输出结果是:
  • 1
    2
    3
    4
    5
  • 1
    3
    4
    5
  • 1
    3
    5
    4
  • 1
    3
    5
    4
    2
console.log(1);
let a = setTimeout(() => {console.log(2)}, 0);
console.log(3);
Promise.resolve(4).then(b => {
console.log(b);
clearTimeout(a);
});
console.log(5);
答案基本才C,D中产生,我选的D。
执行顺序是先执行同步的任务--输出1,3,5
在执行异步任务:其中异步任务分为宏任务和微任务,微任务优先级高于宏任务。promise.then执行的微任务,输出4,然后clearTimeout(a)清除了定时器,于是不再打印2。
结果输出:1,3,5,4
发表于 2019-08-25 14:33:20 回复(0)
promise 是微任务,会在当前轮事件循环结束前执行;
setTimeout 是宏任务,在下一轮事件循环执行;
所以这个 setTimeout 设置的定时器被取消掉了。
发表于 2019-08-16 15:46:27 回复(0)
console.log(1);//同步
let a = setTimeout(() => {console.log(2)}, 0);//回调
console.log(3);//同步

Promise.resolve(4).then(b => {
console.log(b);//异步
clearTimeout(a);
});
console.log(5);//同步
执行顺序:同步=》异步=》回调
先执行同步代码 输出1,3,5
在执行异步代码 输出 4
取消了定时器事件 于是不输出2
发表于 2019-09-03 14:27:29 回复(0)
promise 是微任务,会在当前轮事件循环结束前执行; setTimeout 是宏任务,在下一轮事件循环执行; 所以这个 setTimeout 设置的定时器被取消掉了。
发表于 2019-09-03 08:29:23 回复(0)
感觉这个题考的是JavaScript的异步加载,有同步和异步加载的情况下,优先因此先是console. log(1) 后面console. log(2)因为是异步加载的会放到后面同步加载完加载 console. log(3) 然后同步console. log(5) 同时promise的用法 是用来解决es5异步加载循环调用的问题,在promise里面清除了 setinterval这个全局对象,因此就不能显示。console. log(4)
编辑于 2019-08-16 07:50:42 回复(0)