前言
大兵老师的 《浏览器的工作原理与实践》一文就到此结束了,非常感谢老师的分享。
由于此文并非完全复制老师原文,其中有针对个人做了一些修改。
而且,此处的文章并不全,里面的结束篇个人 并没有更了,后期在复习的时候,个人还是会进行新一版的更新。
所以还是再次建议大家去看看全文。
此文 老师 编写的时间是 2019 年下半年,个人更完全文的时间是 2022年 5月份为止。
结果测试
查看答案1、(单选) 关于 await/async ,以下哪个说法不正确?
A、await 等待一个 Promise 对象,如果 Promise 的状态变成了resolve 或者 reject,那么 async 函数会恢复执行
B、V8 通过协程来实现 async 函数暂停和恢复执行
C、如果 await 等待的是一个非 Promise 对象,那么 V8 会隐式地将该对象包装厂一个已经 resolve 的 Promise 对象
D、async 函数不支持 try/catch 来捕获异常
2、(多选) 使用 Promise 时,微任务是什么时候生成和触发的?
A、创建 Promise 时就生成了微任务
B、调用 resolve 或者 reject 时生成微任务
C、在当前宏任务即将退出之前执行
D、在当前宏任务退出之后立即执行
查看答案
3、(单选) 通常,当页面执行动画时,刷新的频率为 60hz,页面才会显得比较流畅,浏览器要保存页面的流畅,处理一帧最多的时长是多少?
A、60 毫秒
B、10 毫秒
C、16.6 毫秒
D、100 毫秒
查看答案
4、(单选) 观察下面 HTML 片段:
css: h1 {font-size: 16px} div p {font-weight: 12px} html: <div> <h1> 效率测试题 </h1> <p> 哪个 css 规则效率更高? </p> </div>下面哪个选择器执行效率更高:
A、h1 {font-size: 16px}
B、div p {font-weight: 12px}
C、没有区别
查看答案
5、(单选) 执行下面代码,打印出来的内容是什么?
let myname = '极客时间' { console.log(myname) let myname = '极客邦' }A、极客时间
B、极客邦
C、抛出异常
查看答案
6、(单选) 执行下面代码,打印出来的内容是什么?
showName() var showName = function() { console.log(2) } function showName() { console.log(1) }A、1
B、2
C、抛出异常
查看答案
7、(单选) 关于渲染流程:
a: 构建 DOM 树
b: 样式计算(Recalculate Style)
c: 布局(Layout)
d: 绘制(Paint)
A、
B、
C、
D、
查看答案
5、(多选)
A、
B、
C、
D、
查看答案
5、(多选)
A、
B、
C、
D、
查看答案
5、(多选)
A、
B、
C、
D、
查看答案
5、(多选)
A、
B、
C、
D、
查看答案
5、(多选)
A、
B、
C、
D、
查看答案
5、(多选)
A、
B、
C、
D、
查看答案
5、(多选)
A、
B、
C、
D、
查看答案
5、(多选)
A、
B、
C、
D、
查看答案
5、(多选)
A、
B、
C、
D、
查看答案
5、(多选)
A、
B、
C、
D、
查看答案
5、(多选)
A、
B、
C、
D、
查看答案
5、(多选)
A、
B、
C、
D、
查看答案
5、(多选)
A、
B、
C、
D、
查看答案
答案
1、D
2、BC
解析:
创建 Promise 时,并不会生成微任务,而是需要等到 Promise 对象调用 resolve 或 reject 函数时才会产生微任务,产生的微任务并不会立即执行,而是等待当前宏任务快要执行结束时再执行。
3、C
解析:
1000/60 = 16.66
4、A
解析:
浏览器是从右向左匹配 CSS 选择器的,当遍历到 p 时,还要额外判断父节点是不是 div,这就做了额外的工作,所以效率会差一点。
5、C
解析:
let 存在块级作用域,它没有变量提升,并且具备暂时性死区特性。
6、A
解析:
在编译阶段,showName 是第二个函数,进入执行阶段,首先执行的就是该函数。
7、D
1、D
1、D
1、D
1、D
1、D
1、D
1、D
1、D
1、D
1、D
1、D
1、D
1、D