八股文
光影博客收录的八股文高频题与参考解析,搜索时也会写成八股、面试八股。下面是站内已有题目,可继续在面试题里按这个词刷。
在面试题中打开共 43 道,本页展示 12 道
什么是闭包 (Closure)?有哪些应用场景?
闭包是内部函数引用外部函数变量的特性,即使外部函数已返回。应用:数据封装、柯里化、防抖节流、模块模式。注意避免内存泄漏。
JavaScript 事件循环 (Event Loop) 的执行机制?
单线程通过事件循环处理异步:同步代码 → 微任务(Promise.then/MutationObserver)→ 宏任务(setTimeout/I/O)。每轮宏任务后清空所有微任务。
Promise 与 async/await 的关系和区别?
Promise 用 then/catch 链式处理异步;async/await 是语法糖,让异步代码像同步编写。await 只能在 async 函数中使用,底层仍是 Promise。
原型链与继承是如何工作的?
每个对象有 __proto__ 指向构造函数的 prototype,形成原型链。属性查找沿链向上直到 null。ES6 class 本质是原型继承的语法糖。
深拷贝与浅拷贝有什么区别?
浅拷贝只复制第一层引用(Object.assign/展开运算符),深拷贝递归复制所有层级。方案:structuredClone()、JSON 序列化(有限制)、递归实现。
this 的指向有哪些规则?
默认指向全局(严格模式 undefined);对象方法指向调用者;箭头函数继承外层 this;call/apply/bind 可显式绑定;new 指向新实例。
防抖 (Debounce) 与节流 (Throttle) 的区别?
防抖:事件停止触发后延迟执行(搜索框输入);节流:固定间隔内只执行一次(滚动事件)。防抖用 clearTimeout + setTimeout,节流用时间戳或定时器。
什么是 BFC?如何创建?有什么作用?
BFC 是独立渲染区域,内部布局不影响外部。创建:overflow 非 visible、display flow-root/flex/grid、float、position absolute/fixed。用于清除浮动、阻止 margin 合并。
flex: 1 到底代表什么含义?
flex: 1 是 flex-grow:1 flex-shrink:1 flex-basis:0% 的简写。元素占据剩余空间一份,多个 flex:1 均分。与 flex:auto(basis:auto)基于内容分配不同。
useEffect 和 useLayoutEffect 有什么区别?
useEffect 在浏览器绘制后异步执行不阻塞渲染;useLayoutEffect 在 DOM 更新后、绘制前同步执行。后者用于需要同步测量/修改 DOM 的场景,避免闪烁。
虚拟 DOM 与 Diff 算法如何工作?
虚拟 DOM 是 JS 对象描述 UI,状态变化时新旧树 Diff 比较后最小化 DOM 更新。策略:同层比较、不同类型直接替换、key 标识移动。Fiber 支持可中断调度。
React.memo 与 useMemo 的区别和用法?
React.memo 浅比较 props 避免不必要的组件渲染;useMemo 缓存计算结果。memo 用于组件级优化,useMemo 用于值级优化。避免过度使用。