JavaScript笔试题:事件循环

1、事件循环面试题一

async function fn1() {
		console.log(1)
		await fn2()
		console.log(2)
	}
	
	async function fn2() {
		console.log('fn2')
	}
	fn1()
	console.log(3)

 await 会阻塞下面的代码(即加入微任务队列),先执行 async 外面的同步代码,同步代码执行完,再回到 async 函数中,再执行之前阻塞的代码

 2、事件循环面试题二

async function async1() {
	    console.log('async1 start')
	    await async2()
	    console.log('async1 end')
	}
	async function async2() {
	    console.log('async2')
	}
	console.log('script start')
	setTimeout(function () {
	    console.log('settimeout')
	})
	async1()
	new Promise(function (resolve) {
	    console.log('promise1')
	    resolve()
	}).then(function () {
	    console.log('promise2')
	})
	console.log('script end')

1、遇到console.log('script start')直接打印 script start

2、遇到setTimeout宏任务,不处理

3、遇到 async1(),执行函数,打印 async1 start, 遇到await 先执行async2(),执行函数

  打印 async2  ,await 堵塞下面代码加入微任务列跳出async1()函数执行同步代码

4、遇到new Promise直接执行,打印promise1 resolve()从“未完成”变为“成功”,异步执行加入微任务列跳出执行同步代码

5、遇到console.log('script end')直接打印 script end   代码上下文执行结束开始循环查找可执行的微任务

6、微任务列 打印await 堵塞得 console.log('async1 end') 打印 async1 end 

7、执行 resolve()执行的then(function () {
            console.log('promise2')
        }) 打印promise2

8、发现微任务无任务,没有开始循环查找可执行的宏任务 console.log('settimeout')打印settimeout

3、事件循环面试题三 

	console.log('script start');
	
	setTimeout(function() {
	  console.log('setTimeout1');
	  Promise.resolve().then(function() {
	  }).then(function() {
	    console.log('promise5');
	    setTimeout(function() {
	      console.log('setTimeout3');
	    }, 0);
	  });
	}, 0);
	
	Promise.resolve().then(function() {
	  console.log('promise1');
	}).then(function() {
	  console.log('promise2');
	  Promise.resolve().then(function() {
	    console.log('promise3');
	  }).then(function() {
	    console.log('promise4');
	    setTimeout(function() {
	      console.log('setTimeout2');
	    }, 0);
	  });
	});
	console.log('script end');

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值