前端面试:WebAPI与事件机制解析
需积分: 0 77 浏览量
更新于2024-08-04
收藏 3KB MD 举报
"这篇文档是针对前端面试中关于webAPI相关的问题进行的总结,适合前端工程师准备面试时查阅。文档包含五个主要问题:重绘与重排的区别、this的指向问题、事件流的两个阶段、事件委托的实现原理以及事件循环机制的理解。"
**1. 重绘与重排(回流)的区别**
重排(回流)是浏览器在DOM元素的几何属性发生变化时,需要重新计算元素及其子元素的位置和大小,进而重新构建渲染树的过程。而重绘发生在重排之后,浏览器对渲染树中受影响的部分进行重新绘制,以更新视觉表现。重排一定会引发重绘,但重绘不一定需要重排。由于重排涉及更多的计算,对性能影响较大,因此应尽量减少重排操作。
**2. this的指向问题**
在JavaScript中,this的指向取决于函数的调用方式:
- 函数调用:默认指向全局对象,在浏览器环境中是window。
- 方法调用:this指向调用该方法的对象。
- 构造函数:在new关键字创建对象时,this指向新创建的对象。
- call/apply:可以显式设置this指向任何对象。
- 箭头函数:不具有自己的this,它继承自父作用域的this。
**3. 事件流的两个阶段**
事件流包括两个阶段:事件捕获和事件冒泡。事件捕获阶段,事件从根元素开始,沿着DOM树向下传递至目标元素;事件冒泡阶段,事件从目标元素向上冒泡到根元素。这两个阶段共同构成了事件的完整传播路径。
**4. 事件委托的实现原理**
事件委托利用事件冒泡的特性,将事件监听器添加到父元素上,当子元素触发事件时,事件会冒泡到父元素,从而触发父元素上的监听器。这种方法适用于处理大量相似子元素的事件,节省内存和提高性能。通过`event.target`可以获取到当前触发事件的DOM节点,`event.stopPropagation()`阻止事件继续冒泡,`event.preventDefault()`阻止默认行为,`return false`在旧版本JavaScript中也有阻止冒泡的效果。
**5. 事件循环机制的理解**
JavaScript是单线程执行的,为了避免阻塞用户界面,引入了事件循环机制。它包含以下部分:
- **任务队列(Task Queue)**:异步操作(如定时器、网络请求等)完成后,将回调函数放入对应的队列。
- **消息队列(Message Queue)**:多个任务队列按顺序排列,等待主线程执行。
- **事件循环(Event Loop)**:不断地检查消息队列,一旦为空则等待,否则取出一个任务交给执行上下文处理。
- **宏任务(Macro Task)**:包括整体代码(script)、定时器(setTimeout/setInterval)、I/O、UI渲染等。
- **微任务(Micro Task)**:包括Promise的then、MutationObserver、process.nextTick等。
事件循环按照宏任务→微任务→宏任务的顺序不断循环,确保了JavaScript代码的异步执行。
综上,这份文档详细解答了前端面试中关于webAPI相关的一些常见问题,帮助面试者更好地理解和准备这些技术点。
2022-06-21 上传
149 浏览量
2024-03-31 上传
2024-04-14 上传
682 浏览量
116 浏览量
2024-03-31 上传
128 浏览量
2023-03-09 上传
Ashindn
- 粉丝: 9
- 资源: 4
最新资源
- VS2012 MFC小程序 简易网络聊天室
- 保险公司讲师邀请函
- elFinder(Web文件管理器) 2.1.57
- AlgorithmForFun:DFS,BFS等算法的实现与演示。演示环境基于Opencv构建
- FMI_论坛
- noq
- meteor-cordova-ios-gap-ready-iframe-issue-example:[WIP] 流星 1.1.0.2
- 保险公司职前教育学员手册
- intervaltree:用JS实现的间隔树
- 谷歌浏览器稳定版 64位_65.0.3325.1811.zip
- FMSCKF:功能性多状态约束卡尔曼滤波器
- phonegap-workshop-master
- hjhg0t96r567trfd
- CPMS-FrontEnd:慢性病人管理系统前端
- 天池新人实战赛之[离线赛]-数据集
- 保险公司机构培训部KPI评估