首页 > 其他分享 >执行以下代码,输出结果为()

执行以下代码,输出结果为()

时间:2023-11-10 16:47:27浏览次数:31  
标签:输出 setTimeout console log 代码 任务 执行

执行以下代码,输出结果为()

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);

promise对象的then()方法属于微任务,而setTimeout()定时器函数为宏任务。
在执行顺序处理上,js会先执行所有同步代码,然后执行微任务队列中的所有微任务,最后再继续执行宏任务。
在本题中,先执行同步代码并输出1 3 5,接着执行Promise.resolve().then()方法,输出4,由于在then()方法内删除了定时器函数,所以不会再输出2,
最终输出结果为1 3 5 4

主要注意一点异步任务中的宏任务和微任务,微任务执行顺序早于宏任务,promise属于微任务

promise 是微任务,会在当前轮事件循环结束前执行;
setTimeout 是宏任务,在下一轮事件循环执行;
所以这个 setTimeout 设置的定时器被取消掉了

同步→异步→回调
promise是异步微任务,
setTimeout是异步宏任务,
微任务比宏任务先执行,所以取消了定时器回调

标签:输出,setTimeout,console,log,代码,任务,执行
From: https://www.cnblogs.com/longmo666/p/17824438.html

相关文章

  • 怎么通过LiveNVR流媒体平台配置实现将海康Ehome、ISUP协议统一接入实现Web无插件播放
    @目录1、海康ISUP接入配置2、海康设备接入2.1、海康EHOME接入配置示例2.2、海康ISUP接入配置示例3、通道配置3.1、直播流接入类型海康ISUP3.2、海康ISUP设备ID3.3、启用保存3.4、接入成功4、相关问题4.1、其它方式接入4.2、如何输出GB281815、RTSP/HLS/FLV/RTMP拉流Onvif流媒......
  • 请问以下JS代码在Node环境下的输出顺序是?
    请问以下JS代码在Node环境下的输出顺序是?Promise.resolve().then(()=>{console.log('p1');}).then(()=>{console.log('p2');})process.nextTick(()=>{console.log('n1');process.nextTick(()=>{console.log('......
  • 已知数组arr = [2,20,3,12,9],现在要对数组进行遍历,只要数组存在大于10的元素,则输出tru
    Avarres=arr.filter((val1,val2)=>{returnval1>10;})console.log(res);Bvarres=arr.some((val1,val2)=>{returnval1>10;})console.log(res);Cvarres=arr.every((val1,val2)=>{returnval1>10;})console.log(res);Dvarres......
  • Android 开机阶段会输出哪些log?
    Android开机阶段输出哪些log?开机loghttp://aospxref.com/android-14.0.0_r2/xref/system/core/init/perfboot.py #Thedefaulteventtagstorecord._DEFAULT_EVENT_TAGS=['boot_progress_start','boot_progress_preload_start','boo......
  • 以下代码执行后,result 的值为 [“75team2017”]
    varresult="75team2017".match(/\d+\w*/g);match()方法检索返回一个字符串匹配正则表达式的结果,匹配成功则返回数组,失败则返回null。在正则表达式中,\d表示匹配数字0-9,+表示匹配前面字符一次或者多次,\w表示匹配字母、数字或者下划线,表示匹配前面字符0次或者多次,修饰符g表示全......
  • 请问以下JS代码的输出是? 935、 ['read', 'write']
    functionfather(){this.num=935;this.work=['read','write','listen'];}functionson(){}son.prototype=newfather();letson1=newson();letson2=newson();son1.num=117;son1.work.pop();console.log(son2.......
  • 小程序性能优化之JavaScript代码优化
    大家好,今天我们来聊一聊小程序性能优化中的JavaScript代码优化。在编程过程中,我们都喜欢轻松愉快,不想戴着沉重的“全局疯狂”帽子。但有时候,过度使用全局变量会让我们的程序变得难以维护,就像在一片大森林里找寻一个小木屋。这时候,我们就需要考虑一下,是不是该减轻一下我们的“全局疯......
  • "+new Array(017)" 这段代码输出为 NaN
    首先,前面+是一元运算符,相当于我们说的正负,无运算效果,但是可以将字符串等转为number类型。此题中017其实是八进制,故而是是Array(15)。这里相当于对于一个未赋值但是长度为15的数组进行number类型转化,其结果为NaN八进制的17转为二进制:001111,再转为十进制的15(8+4+2+1)+运算符......
  • Vue3 路由查询参数更新后,执行更新方法
    import{ref,defineComponent,watch,getCurrentInstance}from"vue";import{useRoute}from'vue-router';exportdefaultdefineComponent({setup(){consttable=ref({key:'spec_id',......
  • 直播系统源代码,实现倒计时,定时任务
    直播系统源代码,实现倒计时,定时任务1.使用CountDownTimer类: valcountDownTimer=object:CountDownTimer(30000,1000){  overridefunonTick(millisUntilFinished:Long){    //在倒计时的过程中,每秒钟会执行一次该方法    valsecondsRemainin......