一、JavaScript语言基础与ES6+新特性
1.1 变量声明与作用域链
ES6新增let/const解决了var的变量提升与块级作用域问题。面试中常考察:
for (var i = 0; i < 3; i++) {setTimeout(() => console.log(i), 100); // 输出3次3}for (let j = 0; j < 3; j++) {setTimeout(() => console.log(j), 100); // 输出0,1,2}
关键点:var存在函数作用域,let/const形成块级作用域,通过TDZ(暂时性死区)避免变量未声明使用。
1.2 Promise与异步编程
考察重点包括:
- 链式调用:通过
.then()返回新Promise实现顺序执行 - 错误处理:
catch()捕获链中任意错误 - 静态方法:
Promise.all()(并行)、Promise.race()(竞速)// 实现一个延迟函数const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));async function fetchData() {await delay(1000);console.log('数据加载完成');}
进阶问题:如何用Promise实现
setTimeout的取消功能?需结合AbortController。
二、前端框架底层原理
2.1 Vue 3响应式系统
Vue 3使用Proxy替代Object.defineProperty,优势在于:
- 支持数组变化检测
- 可拦截更多操作(如
deleteProperty) - 性能更高(无需深度遍历)
// 简易响应式实现const reactive = (obj) => {return new Proxy(obj, {get(target, key) {track(target, key); // 收集依赖return target[key];},set(target, key, value) {target[key] = value;trigger(target, key); // 触发更新}});};
面试陷阱:
Proxy无法监听新增属性,需配合Reflect.set()使用。
2.2 React Hooks工作机制
Hooks核心依赖链表结构管理状态,常见问题包括:
- 闭包陷阱:函数组件内异步操作获取的state可能是旧值
function Counter() {const [count, setCount] = useState(0);const handleClick = () => {setTimeout(() => {setCount(count + 1); // 错误:始终基于初始值}, 1000);};// 正确写法:使用函数式更新const handleClickFix = () => {setTimeout(() => setCount(c => c + 1), 1000);};}
- 自定义Hook复用逻辑:通过
useEffect+useRef实现依赖控制
三、性能优化与工程化
3.1 浏览器渲染优化
- 重绘与回流:避免频繁操作DOM,使用
documentFragment批量更新 - CSS优化:
transform/opacity触发GPU加速,减少layout触发 - 防抖节流:
// 节流函数function throttle(fn, delay) {let lastTime = 0;return (...args) => {const now = Date.now();if (now - lastTime >= delay) {fn.apply(this, args);lastTime = now;}};}
3.2 Webpack配置实战
- 代码分割:
SplitChunksPlugin拆分公共依赖module.exports = {optimization: {splitChunks: {chunks: 'all',cacheGroups: {vendor: {test: /[\\/]node_modules[\\/]/,name: 'vendors',chunks: 'all'}}}}};
- Tree Shaking:需配置
mode: 'production'且使用ES6模块语法
四、TypeScript与安全实践
4.1 类型系统进阶
- 泛型约束:
interface Lengthwise {length: number;}function loggingIdentity<T extends Lengthwise>(arg: T): T {console.log(arg.length);return arg;}
- 实用类型:
Partial<T>、Pick<T, K>、Record<K, T>
4.2 安全防护
- XSS防御:
- 内联脚本使用
textContent替代innerHTML - CSP(内容安全策略)限制资源加载源
- 内联脚本使用
- CSRF防护:
- 同源检测+Token验证
- 禁用第三方Cookie
五、2025年新兴技术考察点
5.1 Web Components应用
- 自定义元素生命周期:
connectedCallback/disconnectedCallback - Shadow DOM封装:
class MyElement extends HTMLElement {constructor() {super();const shadow = this.attachShadow({ mode: 'open' });shadow.innerHTML = `<style>div { color: red; }</style><div>Hello</div>`;}}customElements.define('my-element', MyElement);
5.2 WebAssembly集成
- C/C++编译为WASM:使用Emscripten工具链
- JS与WASM交互:
// 加载.wasm文件WebAssembly.instantiateStreaming(fetch('module.wasm')).then(obj => {console.log(obj.instance.exports.add(2, 3)); // 调用WASM函数});
六、面试准备策略
- 知识图谱构建:按模块整理核心概念(如JS→异步→Promise→微任务)
- 代码实战训练:在LeetCode刷题时侧重前端场景题(如DOM操作、事件委托)
- 项目复盘:准备3个以上项目,重点说明技术选型理由与优化效果
- 软技能提升:使用STAR法则描述问题解决过程(Situation-Task-Action-Result)
示例回答模板:
“在XX项目中,我们遇到首屏加载慢的问题(Situation)。我的任务是优化性能(Task)。通过代码分割将Bundle体积减少40%,并使用Service Worker缓存静态资源(Action)。最终首屏时间从3.2s降至1.1s(Result)。”
本文通过系统化知识梳理与实战案例解析,帮助开发者建立2025年前端技术全景认知。建议结合开源项目(如Vue源码解读)与工具链(如Vite)深入实践,持续提升核心竞争力。