标签题目
JavaScript相关面试题
new 关键字的运行流程?实现一个自己的 new
这题考察 new 的四步语义、原型链绑定、this 绑定和构造函数返回值规则,手写实现要覆盖返回对象的特殊分支。
说一下 JS 的继承机制
这道题考察 JS 继承背后的原型链查找、实例属性初始化、方法复用和 ES6 class 语义。高质量回答要把对象怎么找属性、子类实例怎么拿到父类初始化结果、不同继承写法各自的坑讲清楚。
了解 JS 的异步嘛?从单线程、事件循环、宏任务和微任务讲一下
这题考察的不是背宏任务、微任务名词,而是能否从调用栈、宿主异步、任务队列、微任务检查点和渲染机会推导代码执行顺序,并解释页面为什么会被长任务或微任务链卡住。
了解模块化么?说说 CommonJS 和 ESModule
这题不是只考 CommonJS 和 ESModule 的语法名称,而是看你能不能从加载流程解释绑定语义、循环依赖、Tree Shaking 和工程互操作。
为什么不用节流,说说防抖和节流的区别
这题考察防抖和节流的触发模型、场景选择和首尾触发配置,重点不是背定义,而是能解释为什么某个业务不用节流。
手写题:数组去重,用多种方式实现
这题考察数组去重的多种实现、相等判断和复杂度边界。高质量回答要覆盖基本类型、NaN、对象引用和对象数组按业务 key 去重。
事件循环和渲染的关系是怎么样的?
这题考察浏览器主线程调度:宏任务执行后清空微任务,随后浏览器在合适时机进行渲染;长任务和微任务堆积都会推迟渲染。
Promise.then 返回的是什么?
这题考察 Promise 链式调用的本质:then 总是返回新的 Promise,新 Promise 的状态由回调返回值、异常或 thenable 解析结果决定。
手撕发布订阅
这题考察发布订阅的核心数据结构和边界处理。高质量实现要包含 on、off、emit、once,并处理执行中增删监听器的问题。
手写:并发池
这题考察 Promise 调度能力。核心是限制同时运行的任务数,保持结果顺序,明确失败策略,并在任务完成后持续补位。
用过 TS 吗,跟 JS 有什么区别?
这题考察 TypeScript 的类型系统边界和工程价值。高质量回答要讲清它是编译期约束、最终运行仍是 JavaScript,并补充外部数据、any 和运行时校验的边界。
手撕:数组拉平(flatten)
这题考察递归遍历、depth 语义、顺序保持和边界处理。回答时要先约定函数契约,再写出不会丢类型的实现,并说明深层数组时的栈风险。
filter、map、reduce 的性能和区别是什么?
这题考察数组高阶函数的语义、返回值、遍历成本和可读性取舍。先讲用途差异,再谈性能,避免把所有问题都归结为 reduce 更强。
数组常用的 API,哪些能改变原数组?
这题考察数组 API 的可变性和返回值语义。回答时按会修改原数组、返回新数组、只读取查询三类整理,并强调 sort、reverse、splice 是高频坑。
闭包是什么,闭包会导致什么?
这题考察词法作用域、变量保留、封装能力和内存风险。回答要说明闭包不是天然泄漏,只有无必要长期持有引用才会形成问题。
this 绑定说说
这题考察 this 的调用点规则、绑定优先级和箭头函数词法 this。回答要强调看调用方式,不是看函数声明位置。