2026前端高频面试题及详细答案(实战完整版)_第1页
2026前端高频面试题及详细答案(实战完整版)_第2页
2026前端高频面试题及详细答案(实战完整版)_第3页
2026前端高频面试题及详细答案(实战完整版)_第4页
2026前端高频面试题及详细答案(实战完整版)_第5页
已阅读5页,还剩5页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026前端高频面试题及详细答案(实战完整版)一、HTML核心面试题1、HTML5新增特性有哪些?日常开发常用哪些?详细答案:HTML5主要新增标签、语义化特性、表单属性、多媒体、本地存储、拖拽、画布等能力,日常高频使用的核心内容如下:1)语义化标签:解决旧版div堆砌、结构混乱的问题,提升可读性和SEO。常用:header、nav、main、section、article、aside、footer。2)多媒体标签:原生支持音视频,无需插件,audio、video。3)表单增强:新增输入类型email、tel、number、date,新增属性required、placeholder、autofocus、autocomplete,大幅简化表单校验。4)本地存储:localStorage、sessionStorage,替代传统cookie存储本地数据。5)其他常用能力:canvas绘图、svg矢量图、拖拽API、viewport适配移动端。日常开发中,语义化标签、表单新属性、本地存储是使用频率最高的内容。2、语义化标签的好处是什么?详细答案:1)代码可读性更强:不用看样式和class名,通过标签就能区分页面结构,团队协作更友好。2)利于SEO优化:搜索引擎爬虫可以精准识别页面模块权重,提升页面收录和搜索排名。3)适配无障碍访问:屏幕阅读器可以识别语义标签,适配残障人士浏览场景。4)结构更规范:避免全用div造成的结构混乱,代码维护成本更低。3、Cookie、localStorage、sessionStorage的区别?详细答案:1)存储大小:Cookie最大4KB;localStorage、sessionStorage约5MB,存储容量更大。2)生命周期:Cookie可设置过期时间,默认关闭浏览器失效;localStorage永久存储,手动清除才会失效;sessionStorage仅当前会话有效,关闭标签页立即清空。3)请求携带:Cookie每次HTTP请求都会自动携带,适合做身份校验;本地存储不会随请求发送,仅前端本地使用。4)作用域:Cookie同域名下所有页面共享;sessionStorage仅限当前标签页;localStorage同域名所有页面共享。5)使用场景:Cookie存登录态、token;localStorage存长期本地配置、用户偏好;sessionStorage存临时会话数据、临时表单数据。二、CSS核心面试题1、标准盒模型和IE怪异盒模型的区别?如何切换?详细答案:盒模型是CSS元素布局的基础,每个元素由content、padding、border、margin四部分组成,两种模型的核心差异是宽高计算规则。1)标准盒模型(content-box):设置的width/height仅为内容区尺寸,元素实际宽高=width+padding+border+margin。是浏览器默认标准模式。2)怪异盒模型(border-box):设置的width/height包含内容、内边距、边框,元素实际宽高=设置的宽高+margin。日常开发基本都用这个模型,不会因为padding、border撑破布局。3)切换方式:通过box-sizing属性切换,全局统一配置*{box-sizing:border-box;}。2、BFC是什么?触发条件和实际应用?详细答案:BFC全称块级格式化上下文,是浏览器的独立渲染区域,内部元素的布局、浮动不会影响外部元素,外部也不会干扰内部。常见触发条件:1)根元素html;2)overflow不为visible(hidden、auto、scroll);3)元素设置float非none;4)position为absolute、fixed;5)display为flex、grid、inline-block。实际开发应用:1)清除浮动:父元素塌陷时,触发父级BFC即可解决;2)解决上下margin重叠问题;3)实现自适应两栏、三栏布局,隔绝元素布局干扰。3、CSS垂直水平居中的常用方案?详细答案:日常开发最常用三种稳定方案,适配不同场景:1)Flex居中(最常用):父容器设置display:flex;justify-content:center;align-items:center;适配所有场景,简单稳定,移动端、PC端通用。2)绝对定位+transform:父级相对定位,子级绝对定位,left、top50%,transform:translate(-50%,-50%);适配未知宽高元素,兼容性好。3)Grid居中:父容器display:grid;place-items:center;代码极简,现代项目首选。4、Flex常用属性及布局原理?详细答案:Flex是弹性布局,分为容器属性和子项属性,核心是通过主轴、交叉轴控制元素排列,完美适配自适应布局。容器常用属性:display:flex开启弹性布局;flex-direction控制主轴方向;justify-content主轴对齐;align-items交叉轴对齐;flex-wrap控制是否换行。子项常用属性:flex-grow剩余空间分配比例;flex-shrink空间不足时缩放比例;flex-basis基础尺寸;flex是三者简写,flex:1代表均分剩余空间。三、JavaScript核心面试题(高频重点)1、var、let、const的区别?详细答案:1)作用域差异:var是函数作用域,let、const是块级作用域({}内部生效),有效解决变量污染问题。2)变量提升:var存在变量提升,可先使用后声明;let、const存在暂时性死区,声明前无法使用,报错。3)重复声明:var允许重复声明;let、const禁止重复声明。4)赋值规则:var、let可修改值;const声明后不可修改引用地址,基础类型值不可变,引用类型可修改内部属性。开发规范:优先用const,可变数据用let,完全不用var。2、原型与原型链、instanceof原理?详细答案:1)原型:每个函数都有prototype显式原型,每个实例对象都有__proto__隐式原型,实例的隐式原型指向构造函数的显式原型。2)原型链:对象查找属性和方法时,先在自身查找,找不到就顺着__proto__向上查找,直到Ototype,最终指向null,这条查找链路就是原型链。原型链核心链路:实例.__proto__→构造函数.prototype→Ototype→null。3)instanceof原理:遍历实例的原型链,判断构造函数的prototype是否出现在原型链上,是则返回true,否则false。3、普通函数和箭头函数的区别?详细答案:1)this指向不同:普通函数this由调用方式决定;箭头函数没有自己的this,继承外层作用域的this,固定不变。2)构造函数:普通函数可以new实例化;箭头函数不能作为构造函数,无法new。3)参数对象:普通函数有arguments类数组对象;箭头函数无arguments,只能用剩余参数...args。4)原型属性:普通函数有prototype原型对象;箭头函数无原型。5)this修改:普通函数可通过call、apply、bind改变this;箭头函数无法修改this。4、JS事件循环(EventLoop)详细流程?详细答案:JS是单线程语言,事件循环是实现异步的核心机制,整体流程分为执行栈、微任务、宏任务三部分。1)先执行同步代码,执行栈清空;2)执行所有微任务(Promise.then、catch、finally、async/await、queueMicrotask),微任务队列清空;3)执行一个宏任务(setTimeout、setInterval、ajax、DOM事件);4)重复以上步骤,形成循环。核心优先级:同步代码>微任务>宏任务。日常面试重点:await后面的代码属于微任务,会在同步代码执行完、宏任务之前执行。5、Promise原理、三种状态、常用方法?详细答案:Promise是解决异步回调地狱的方案,让异步代码扁平化、可链式调用。1)三种状态:pending等待中、fulfilled成功、rejected失败。状态一旦改变,永久固定,不可二次修改。2)常用方法:then:接收成功结果,可链式调用;catch:捕获失败异常;finally:无论成功失败都会执行;Promise.all:所有Promise成功才返回结果,一个失败直接报错;Promise.race:谁先执行完成返回谁的结果,无论成功失败;Promise.allSettled:等待所有任务完成,返回所有结果状态,适合批量异步不中断场景。6、深拷贝和浅拷贝的区别?手写完整深拷贝?详细答案:1)浅拷贝:只拷贝对象第一层属性,复杂引用类型(数组、对象)仅拷贝地址,修改新对象会影响原对象。常用方法:Object.assign、扩展运算符、slice。2)深拷贝:递归拷贝所有层级属性,开辟全新内存地址,新旧对象完全独立,互不影响。3)手写深拷贝(兼容Map、Set、循环引用):javascript

functiondeepClone(obj,hash=newWeakMap()){

//基础类型、null、undefined直接返回

if(obj===null||typeofobj!=='object')returnobj;

//处理循环引用

if(hash.has(obj))returnhash.get(obj);

//处理日期、正则

if(objinstanceofDate)returnnewDate(obj);

if(objinstanceofRegExp)returnnewRegExp(obj.source,obj.flags);

//处理数组、对象

letnewObj=Array.isArray(obj)?[]:{};

hash.set(obj,newObj);

//递归遍历赋值

Reflect.ownKeys(obj).forEach(key=>{

newObj[key]=deepClone(obj[key],hash);

})

returnnewObj;

}7、async/await原理及使用注意事项?详细答案:async/await是Promise的语法糖,让异步代码写法和同步一致,可读性极高,是目前项目主流异步写法。1)async修饰的函数,返回值一定是Promise对象;2)await只能在async函数内部使用,会阻塞当前代码,等待Promise执行完成;3)注意事项:await报错会终止代码,必须用try/catch捕获异常;多个无依赖的await建议用Promise.all并行执行,提升性能,避免串行等待耗时。四、浏览器原理与性能优化1、浏览器从输入网址到页面渲染完成的全过程?详细答案:1)DNS解析:将域名解析为服务器IP地址;2)TCP三次握手:建立可靠传输连接;3)发送HTTP请求:携带请求头、参数、Cookie等数据;4)服务器响应:返回状态码、响应头、HTML资源;5)解析渲染:浏览器解析HTML生成DOM树,解析CSS生成CSSOM树,合并为渲染树;6)布局、绘制、合成:计算元素布局位置,绘制像素图层,最终展示页面;7)TCP四次挥手:断开连接。2、回流和重绘的区别?如何优化?详细答案:1)重绘:修改元素颜色、透明度、背景色等不影响布局的样式,仅重新绘制像素,开销较小。2)回流(重排):修改元素宽高、位置、字体、display等影响页面布局的样式,浏览器重新计算整个页面布局,开销极大,会触发重绘。优化方案:1)批量修改样式,统一操作,避免频繁修改DOM样式;2)使用类名统一样式替换;3)复杂动画用transform、opacity,仅触发合成层,不回流不重绘;4)脱离文档流动画,减少页面重排范围。3、前端常用性能优化手段(2026实战版)详细答案:从加载、渲染、代码、网络四个维度优化,适配现代项目:1)资源优化:图片压缩、转WebP格式、图片懒加载;静态资源CDN加速;2)代码优化:JS、CSS压缩打包、Tree-Shaking剔除无效代码;路由懒加载、组件按需引入;3)缓存优化:强缓存Cache-Control、协商缓存ETag;本地缓存静态资源;4)渲染优化:减少回流重绘;开启硬件加速;虚拟列表处理大数据渲染;5)网络优化:接口节流防抖、接口缓存、合并请求;HTTP/2、HTTPS多路复用。4、浏览器垃圾回收机制?详细答案:浏览器自动管理内存,回收无用对象释放内存,核心是标记-清除算法。1)标记阶段:从全局根对象遍历所有可访问对象,标记存活对象;2)清除阶段:未被标记的对象判定为垃圾,直接回收内存;3)新生代/老生代回收:短期小对象高频回收,长期大对象低频回收,提升回收效率。常见内存泄漏场景:全局变量过多、定时器未清除、事件监听未移除、闭包滥用、DOM引用未清空。五、前端工程化与框架高频题1、Vue双向绑定原理?详细答案:Vue2基于Object.defineProperty数据劫持+发布订阅模式;Vue3基于Proxy代理。核心流程:劫持数据的读取和修改操作,数据变化时通知订阅的视图更新,视图输入变化时同步更新数据,实现双向绑定。Vue3Proxy优势:可监听数组变化、可监听新增/删除属性、支持更多数据类型,解决了Vue2的响应式缺陷。2、React虚拟DOM与Diff算法原理?详细答案:虚拟DOM是用JS对象模拟真实DOM结构,操作JS对象开销远小于操作真实DOM,提升渲染性能。Diff算法核心:新旧虚拟DOM对比,同层对比,不跨层级,通过key精准识别节点,最小化更新真实DOM,避免全量重渲染。key作用:唯一标识节点,提升Diff对比准确率,避免节点错乱、重复渲染问题。3、Webpack核心作用与常用优化配置?详细答案:Webpack是前端模块打包工具,将零散的JS、CSS、图片、组件等资源打包为浏览器可识别的静态资源。核心配置优化:1)mode区分开发、生产环境;2)开启Tree-Shaking去除冗余代码;3)代码分割splitChunks拆分公共代码、第三方包;4)资源压缩、图片压缩;5)缓存配置,提升打包速度。六、手写编程高频题1、手写Promise.all详细答案:javascript

functionpromiseAll(promises){

returnnewPromise((resolve,reject)=>{

if(!Array.isArray(promises)){

returnreject(newError('参数必须是数组'))

}

letresult=[]

letcount=0

constlen=promises.length

if(len===0)resolve([])

promises.forEach((item,index)=>{

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论