logo

前端面试题汇总大全(含答案)-- 持续更新

作者:4042025.09.19 14:37浏览量:0

简介:本文汇总前端开发高频面试题,涵盖HTML/CSS/JavaScript/框架/性能优化等核心领域,附标准答案与深度解析,适合备战面试或系统复习的开发者收藏使用。

前端面试题汇总大全(含答案)— 持续更新

一、HTML与CSS基础

1.1 HTML语义化标签

问题:为什么推荐使用<header><section>等语义化标签而非<div>
答案

  • SEO优化:语义化标签帮助搜索引擎理解页面结构,提升关键词匹配度。
  • 可访问性:屏幕阅读器能通过标签识别内容类型(如<nav>表示导航栏)。
  • 代码可维护性:明确标签用途减少注释需求,例如:
    1. <!-- 传统写法 -->
    2. <div class="header">...</div>
    3. <!-- 语义化写法 -->
    4. <header>...</header>

1.2 CSS盒模型

问题:如何设置盒模型使width包含paddingborder
答案:通过box-sizing: border-box实现,示例:

  1. .box {
  2. box-sizing: border-box;
  3. width: 200px;
  4. padding: 10px;
  5. border: 5px solid #000;
  6. /* 实际占用宽度仍为200px */
  7. }

应用场景:响应式布局中避免元素因内边距导致溢出。

1.3 定位机制

问题position: sticky的生效条件是什么?
答案

  • 需指定top/right/bottom/left中的至少一个值。
  • 父容器不能有overflow: hidden属性。
  • 示例:导航栏固定效果
    1. .nav {
    2. position: sticky;
    3. top: 0;
    4. background: white;
    5. }

二、JavaScript核心

2.1 变量与作用域

问题letvar的区别有哪些?
答案
| 特性 | var | let |
|——————-|——————————-|——————————-|
| 作用域 | 函数作用域 | 块级作用域 |
| 重复声明 | 允许 | 报错 |
| 变量提升 | 是(值为undefined) | 存在暂时性死区 |

代码示例

  1. console.log(a); // undefined(变量提升)
  2. var a = 1;
  3. console.log(b); // ReferenceError(暂时性死区)
  4. let b = 2;

2.2 异步编程

问题:实现一个延迟2秒后执行的函数。
答案

  • Promise版
    1. function delay(ms) {
    2. return new Promise(resolve => setTimeout(resolve, ms));
    3. }
    4. async function run() {
    5. await delay(2000);
    6. console.log("2秒后执行");
    7. }
  • Callback版
    1. function delay(ms, callback) {
    2. setTimeout(callback, ms);
    3. }
    4. delay(2000, () => console.log("2秒后执行"));

2.3 原型链

问题:如何判断对象是否拥有某个属性(包括继承属性)?
答案:使用in操作符或Object.prototype.hasOwnProperty()的组合:

  1. const obj = { a: 1 };
  2. const protoObj = { b: 2 };
  3. Object.setPrototypeOf(obj, protoObj);
  4. console.log("a" in obj); // true
  5. console.log("b" in obj); // true(继承属性)
  6. console.log(obj.hasOwnProperty("b")); // false

三、前端框架与库

3.1 React Hooks

问题useEffect的依赖项数组有什么作用?
答案

  • 控制副作用的执行时机,依赖项变化时重新执行。
  • 空数组[]表示仅在组件挂载时执行一次。
  • 常见错误:遗漏依赖项导致闭包问题

    1. // 错误示例:count始终为0
    2. function Counter() {
    3. const [count, setCount] = useState(0);
    4. useEffect(() => {
    5. const id = setInterval(() => {
    6. setCount(count + 1); // 依赖count但未声明
    7. }, 1000);
    8. }, []);
    9. // 修正方案:使用函数式更新
    10. useEffect(() => {
    11. const id = setInterval(() => {
    12. setCount(c => c + 1);
    13. }, 1000);
    14. }, []);
    15. }

3.2 Vue响应式原理

问题:Vue2如何实现数据响应式?
答案

  • 数据劫持:通过Object.defineProperty递归遍历对象属性,设置getter/setter
  • 依赖收集Watcher对象在读取数据时被触发,数据变更时通知更新。
  • 局限性:无法检测数组索引变化和新增属性(需用Vue.set)。

Vue3改进:使用Proxy替代,支持动态属性监听。

四、性能优化

4.1 加载优化

问题:如何减少首屏加载时间?
答案

  • 代码分割:动态导入import()实现路由级懒加载。
    1. const module = await import('./module.js');
  • 资源预加载
    1. <link rel="preload" href="critical.css" as="style">
  • 图片优化:使用WebP格式,配合srcset实现响应式图片。

4.2 渲染优化

问题:列举3种减少重绘(Reflow)的方法。
答案

  1. 使用transformopacity实现动画(触发GPU加速)。
  2. 避免频繁操作DOM,批量更新(如React的虚拟DOM)。
  3. 对固定尺寸元素使用will-change属性提前告知浏览器优化。

五、持续更新机制

本文章将每两周更新一次,新增内容涵盖:

  1. 新兴框架:如SolidJS、Svelte的原理题。
  2. 浏览器新特性:如CSS Container Queries的实践题。
  3. 工程化:Vite、TurboPack等构建工具优化题。

参与贡献:欢迎通过GitHub提交PR补充题目或修正答案,共同维护高质量题库。


结语:前端技术日新月异,掌握核心原理比记忆答案更重要。建议结合本文题目深入理解底层机制,同时多实践开源项目提升综合能力。

相关文章推荐

发表评论