上一篇慕课css面试题,链接地址
下一篇慕课JS面试题,链接地址
1. js面试题
1. event loop事件循环机制
案例
- console.log(‘Hi‘)先在 2.Call Stack中执行, 执行完清空,再走1.Browser console。输出 Hi
- setTimeout ( function cb1() ) ;先在 2.Call Stack中执行,进入 3.Web APIs,在此停留5s。
- 并清除掉 2.Call Stack中的 setTimeout cb1。这里就执行结束了。
- 往下执行console.log(‘Bye’)
-console.log('Bye‘)先在 2.Call Stack中执行, 执行完清空,再走 1.Browser console。输出 Bye
- 到 Bye输出完,可执行代码全部执行完毕,2.Call Stack清空。此时 Timer cb1 还在 3.Web APIs中 5s还没到。
- 此时启动Event loop 机制,同步代码执行完毕,2.Call Stack 空了。
解释:暂时没有代码可被推入Call Stack中,会立即启动Event loop机制,浏览器内核启动的事件循环机制。此时Event loop 会一遍一遍从(异步回调)Callback Queue中找,有没有函数了,有函数就拿过来。拿过来就推入 Call Stack中执行。
- 一直等到 3,Web Apis中 Timer cb1定时器结束,推入4.Callback Queue中,并清除Web Apis的 Timer cb1。
- 此时Event loop 发现 回调队列 Queue中有一个可执行函数,并推入 2.Call Stack中,Queue清除掉 cb1函数。
- Call Stack中 现有 cb1函数,执行里面的 log.(‘cb1’) 并推入1.Browser console,控制台打印 cb1。并清除Call Stack中的log('cb1‘)
- Call Stack 会在从cb1函数中寻找可执行的log,此时cb1函数中无任何可执行内容,清除掉cb1函数方法。
到此为止,整段代码执行完毕
浏览器控制台输出
Hi Bye cb1
2.Promise面试题
1.promise 的三种状态是什么?状态和变化
案例
2.then和cath改变状态
3. 请解答以下promise面试题
3. 手写promise 加载图片
4. async/await 和 promise的关系?
- 案例
- 看如下题
const c 上 await如果要捕获错误可以使用 try catch捕获
5. 异步本质 ,看如下async/await顺序题?
- 答案
3. 讲解宏任务 macroTask 和微任务 microTask ?