2026前端面试题及答案

作者:阿芯爱编程日期:2026/1/18

2026前端面试题及答案

HTML/CSS 部分

1. 什么是盒模型?标准盒模型和IE盒模型的区别是什么?

**答案:**盒模型是CSS中用于布局的基本概念,每个元素都被表示为一个矩形盒子,由内容(content)、内边距(padding)、边框(border)和外边距(margin)组成。

区别:

  • 标准盒模型(W3C盒子模型)widthheight只包含内容(content)
  • IE盒模型(怪异模式盒子模型)widthheight包含内容(content)、内边距(padding)和边框(border)

可以通过box-sizing属性切换:

1/* 标准盒模型 */
2box-sizing: content-box;
3
4/* IE盒模型 */
5box-sizing: border-box;
6

2. CSS选择器优先级如何计算?

**答案:**CSS选择器优先级从高到低:

  1. !important
  2. 内联样式(style="")
  3. ID选择器(#id)
  4. 类选择器(.class)、属性选择器([type="text"])、伪类(:hover)
  5. 元素选择器(div)、伪元素(::before)
  6. 通配符(*)、关系选择器(>, +, ~)

计算规则:

  • ID选择器:100
  • 类/属性/伪类:10
  • 元素/伪元素:1
  • 相加比较,值大的优先级高

3. BFC是什么?如何创建BFC?

**答案:**BFC(Block Formatting Context)块级格式化上下文,是Web页面的可视化CSS渲染的一部分,是一个独立的渲染区域。

创建BFC的方法:

  • float不为none
  • position为absolute或fixed
  • display为inline-block、table-cell、table-caption、flex、inline-flex
  • overflow不为visible

BFC特性:

  1. 内部盒子垂直排列
  2. margin会重叠在同一个BFC中
  3. BFC区域不会与float box重叠
  4. BFC是独立容器,外部不影响内部

JavaScript部分

4. JavaScript中的事件循环机制是怎样的?

**答案:**JavaScript是单线程语言,通过事件循环机制实现异步。事件循环由以下部分组成:

  1. 调用栈(Call Stack):执行同步代码的地方
  2. 任务队列(Task Queue)
    • 宏任务(macrotask):script整体代码、setTimeout、setInterval、I/O、UI渲染等
    • 微任务(microtask):Promise.then/catch/finally、MutationObserver等

执行顺序:

  1. 执行同步代码(宏任务)
  2. 执行过程中遇到异步任务:
    • 微任务放入微任务队列
    • 宏任务放入宏任务队列
  3. 同步代码执行完毕,检查微任务队列并全部执行
  4. UI渲染(如果需要)
  5. 取出一个宏任务执行,重复上述过程

5. ES6中let/const与var的区别?

答案:

varletconst
作用域函数作用域块级作用域块级作用域
变量提升暂时性死区暂时性死区
重复声明允许不允许不允许
全局属性会成为不会成为不会成为
初始值可不设可不设必须设置
修改值可以可以不可以

6. Promise的原理是什么?手写一个简单的Promise实现。

**答案:**Promise是一种异步编程解决方案,主要解决回调地狱问题。它有三种状态:pending、fulfilled、rejected。

简单实现:

1class MyPromise {
2  constructor(executor) {
3    this.state = 'pending';
4    this.value = undefined;
5    this.reason = undefined;
6    this.onFulfilledCallbacks = [];
7    this.onRejectedCallbacks = [];
8    
9    const resolve = (value) => {
10      if (this.state === 'pending') {
11        this.state = 'fulfilled';
12        this.value = value;
13        this.onFulfilledCallbacks.forEach(fn => fn());
14      }
15    };
16    
17    const reject = (reason) => {
18      if (this.state === 'pending') {
19        this.state = 'rejected';
20        this.reason = reason;
21        this.onRejectedCallbacks.forEach(fn => fn());
22      }
23    };
24    
25    try {
26      executor(resolve, reject);
27    } catch (err) {
28      reject(err);
29    }
30  }
31  
32  then(onFulfilled, onRejected) {
33    if (this.state === 'fulfilled') {
34      onFulfilled(this.value);
35    }
36    
37    if (this.state === 'rejected') {
38      onRejected(this.reason);
39    }
40    
41    if (this.state === 'pending') {
42      this.onFulfilledCallbacks.push(() => onFulfilled(this.value));
43      this.onRejectedCallbacks.push(() => onRejected(this.reason));
44    }
45  }
46}
47

React/Vue框架部分

7.React中setState是同步还是异步的?

**答案:**在React中,setState的行为表现有时"异步",有时"同步":

1.大部分情况下表现为异步(批量更新优化):

  • React合成事件处理函数中(setTimeout/setInterval/Promise回调等原生事件外)
  • React生命周期函数中

在这些情况下React会将多个setState合并为一个更新以提高性能。

2.某些情况下表现为同步:

  • setTimeout/setInterval回调中
  • DOM原生事件处理函数中
  • Promise.then等异步代码中

React18后所有情况都默认批量处理(auto batching),如需强制同步可使用flushSync。

原理原因: React通过isBatchingUpdates标志控制是否批量更新,合成事件和生命周期会开启此标志。

###8.Vue的响应式原理是怎样的?

**答案:**Vue2.x使用Object.defineProperty,Vue3使用Proxy实现响应式:

Vue2实现原理: 1.数据劫持:通过Object.defineProperty对data对象每个属性添加getter/setter追踪变化。

1Object.defineProperty(obj, key, { 
2 get() { //依赖收集 },
3 set(newVal) { //触发更新 } 
4})
5

2.依赖收集:在getter中将观察者Watcher实例添加到Dep订阅器中。 3.派发更新:setter被触发时通知Dep中的所有Watcher重新计算并更新视图。 缺点:无法检测对象属性的添加删除,数组变动需特殊处理。

Vue3使用Proxy改进:

1new Proxy(data, { 
2 get(target, key){},
3 set(target, key, value){},
4 deleteProperty(target, key){}
5})
6

优势:可直接监听对象/数组的各种变化;无需递归遍历整个对象初始化。

##性能优化相关

###9.Webpack有哪些常见的性能优化手段?

构建速度优化:

1.缩小文件搜索范围

1resolve:{ modules:[path.resolve(__dirname,'node_modules')] },
2module:{ noParse:/jquery|lodash/ } //忽略未模块化库的解析  
3

2.缓存loader结果(cache-loader/babel-loader?cacheDirectory=true)

3.多进程构建(thread-loader/happyPack)

4.DllPlugin预编译不变模块

5.合理使用sourceMap(开发环境cheap-module-eval-source-map)

打包体积优化:

1.Tree Shaking(ES6模块+production模式+sideEffects配置)

2.Code Splitting:

1optimization:{ splitChunks:{ chunks:'all' } },
2entry:{ main:'./src/main.js', vendor:['lodash'] }  
3

3.Scope Hoisting(ModuleConcatenationPlugin) 4.UglifyJsPlugin压缩混淆代码

5.Gzip压缩(compression-webpack-plugin) 6.CDN引入外部资源(externals) 7.PurgeCSS移除无用CSS

8.OptimizeCSSAssetsPlugin压缩CSS

9.ImageMinimizerPlugin压缩图片

10.babel按需加载polyfill

##算法与编程题

###10.[编程题]手写防抖和节流函数

防抖(debounce):高频触发时只在停止触发后执行一次

1function debounce(fn, delay){
2 let timer=null;
3 return function(...args){
4   clearTimeout(timer);  
5   timer=setTimeout(()=>fn.apply(this,args),delay);
6 }
7}
8

节流(throttle):高频触发时每隔一段时间执行一次

1function throttle(fn, interval){
2 let lastTime=0;  
3 return function(...args){
4   const now=Date.now();
5   if(now-lastTime>=interval){
6     fn.apply(this,args);  
7     lastTime=now;  
8   }  
9 } 
10}
11
12//定时器版本节流:
13function throttle(fn,delay){  
14 let timer=null;   
15 return function(...args){   
16   if(!timer){     
17     timer=setTimeout(()=>{      
18       fn.apply(this,args);       
19       timer=null;      
20     },delay);     
21   }   
22 };   
23}   
24

##HTTP与浏览器相关

###11.HTTPS的工作原理是什么?

HTTPS=HTTP+TLS/SSL加密层工作流程:

1.Client发送支持的加密算法列表+随机数A给Server

2.Server选择加密算法+发送数字证书+随机数B给Client

3.Client验证证书有效性(颁发机构/过期时间/域名匹配),生成随机数C并用证书公钥加密发送给Server

4.Server用私钥解密获取随机数C

5.Client和Server都用ABC三个随机数生成对称加密密钥(session key)

6.HTTP通信开始使用该密钥加密数据

关键点: -CA机构验证服务器身份防止中间人攻击
-非对称加密交换对称密钥提高安全性又保证性能
-TLS握手阶段采用非对称加密通信阶段采用对称加密

安全特性: 机密性(对称加密)+完整性(MAC校验)+身份认证(X509证书链)


2026前端面试题及答案》 是转载文章,点击查看原文


相关推荐


后端线上发布计划模板
uzong2026/1/10

敬畏每一行代码,敬畏每一次变更。 本模板旨在通过结构化、可验证、可回溯的方式,降低发布风险,保障系统稳定。 一、📅 发布基本信息 项目内容发布名称示例:用户中心 v2.3.0 上线发布时间2026-01-15 01:00 – 02:30发布负责人xxx协同人员xxx发布类型✅ 功能上线 / 🔁 配置变更 / 🐞 紧急修复 / ⚙️ 架构调整是否灰度发布是 / 否(若“是”,说明策略:如 5% → 20% → 100%) 二、


权限与访问控制
weixin79893765432...2026/1/2

目录 一、概念二、权限与访问控制的「能力全景图」三、前端视角的「权限控制分层模型」(核心)1、登录态层(Authentication State)2、路由层(Page Access Control)3、菜单层(Navigation Control)4、组件 / 操作层(Action Control) 四、前端权限系统的“典型数据流”五、权限模型的三种常见设计(前端必须懂)1、RBAC(基于角色)2、PBAC(基于权限点)3、ABAC(基于属性/规则) 六、重点「权限与访问控制」业务剖析


智谱年末王炸:GLM-4.7开源,这可能是给程序员最好的圣诞礼物
墨风如雪2025/12/23

2025年的年底,本以为AI圈的大战会随着节日季的到来暂时偃旗息鼓,没想到智谱AI在这个节点扔下了一枚重磅炸弹。 就在12月23日,他们正式发布并开源了GLM-4.7。这不仅仅是一次常规的版本号迭代,更像是一次针对开发者痛点的精准爆破。如果你还在为开源模型写不出能跑的代码而头疼,或者还在心疼闭源API高昂的账单,那么GLM-4.7可能正是你在等的那个破局者。 这不是参数堆砌,是实打实的“智力”升级 先说最直观的感受。过去我们用开源模型写代码,往往是“一看顿悟,一跑报错”。但这次GLM-4.7在


【鸿蒙开发案例篇】鸿蒙6.0的pdfService与pdfViewManager终极爆破
威哥爱编程2025/12/15

大家好,我是V哥。 兄弟们抄家伙!今天给大家分享用鸿蒙6.0的PDF Kit撕碎文档开发防线,全程高能代码扫射,专治各种PDF开发不服!以下基于HarmonyOS 6.0(API 21)的ArkTS实战,弹药已上膛👇 联系V哥获取 鸿蒙学习资料 💣 第一弹:pdfService——文档底层爆破术 核心能力:文档加载/编辑/转换 import { pdfService } from '@kit.PDFKit'; import { BusinessError } from '@kit.Ba


手写 EventEmitter:深入理解发布订阅模式
1024肥宅2025/12/7

引言 在 JavaScript 开发中,事件驱动编程是构建可维护、可扩展应用的核心范式之一。从浏览器 DOM 事件到 Node.js 的异步 I/O,从 Vue 的组件通信到 React 的状态管理,发布订阅模式无处不在。 通过手写一个符合 Node.js EventEmitter 标准的实现,我们不仅能深入理解事件驱动架构的设计原理,还能掌握 JavaScript 中闭包、内存管理、设计模式等核心概念。更重要的是,这是面试中常见的高级题目,能体现你对JavaScript设计模式的理解深度。 本


C#小案例-->让两个线程交替打印偶数和奇数值(并发)
MM_MS2025/11/28

方法一: 编写代码实现切换逻辑 using System; using System.Threading; namespace 让两个线程交替打印偶数和奇数值_并发_ { internal class Program { // ===================== 共享资源与同步工具 ===================== // 1. 偶数线程的当前值(初始为0,每次+2,打印偶数) private static i

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客