JavaScript¶
第一梯队(极高频)¶
这些基本每个公司都可能会问,别去赌不考的概率
- 什么是 JavaScript 事件循环(Event Loop)?宏任务和微任务执行顺序是怎样的?
- Promise 的状态有哪些?状态如何变化?
- Promise.then 返回值规则是什么?(返回普通值 / Promise / 抛异常)
- async / await 和 Promise 的关系是什么?
- JavaScript 有哪些数据类型?
- 如何判断数据类型?(typeof / instanceof / Object.prototype.toString)他们之间的区别
- 原型链是什么?JavaScript 的继承是如何实现的?
- 闭包是什么?有哪些应用场景?可能产生什么问题?
- var / let / const 的区别是什么?
- 箭头函数和普通函数的区别是什么?
第二梯队(高频)¶
这些也是大厂常问
- JavaScript 为什么是单线程?如何实现异步编程?
- 宏任务和微任务分别有哪些?
- Promise.all / Promise.race / Promise.allSettled 的区别是什么?
- 事件循环相关代码输出题(Promise + setTimeout)
- new 一个构造函数时内部发生了什么?
- call、apply、bind 的区别是什么?
- this 的指向规则是什么?
- 深拷贝有哪些实现方式?
- 垃圾回收机制是什么?新生代和老生代如何工作?
- 栈和堆的区别是什么?
第三梯队(中高频)¶
- JavaScript 数组有哪些常用方法?
- 哪些数组方法会改变原数组?
- for...in 和 for...of 的区别是什么?
- map 和 forEach 的区别是什么?
- reduce 的使用场景是什么?
- 数组去重有哪些方法?
- 数组扁平化如何实现?
- 如何判断一个对象是空对象?
- Object 和其他数据类型的本质区别是什么?
- Object.defineProperty 和 Proxy 的区别是什么?
第四梯队(中频)¶
- JavaScript 模块化机制是什么?ESM 如何运行?
- JS 模块导入时会不会执行 IIFE?
- ES6 有哪些新特性?
- class 和 function 构造函数的区别是什么?
- WeakMap 和 Map 的区别是什么?
- WeakMap 的应用场景有哪些?
- typeof null 为什么是 object?
- 为什么不可迭代对象不能用 for...of?
代码输出 / 场景题¶
- 作用域链和变量提升相关代码输出题
- async / await / Promise / setTimeout 执行顺序输出题
- class 继承代码输出题
- toSorted 和 sort 的代码输出结果
JS 手写题高频¶
- 手写 防抖(debounce)函数
- 手写 节流(throttle)函数
- 手写 数组 map 方法
- 手写 深拷贝函数
- 手写 EventEmitter(发布订阅模式)
- 手写 Promise 简易实现
- 手写 数组扁平化
- 手写 数组去重
- 手写 LRU 缓存
- 手写 Proxy 代理对象
JS 场景 / 机制类¶
- setTimeout(1000) 一定是 1000ms 吗?为什么?跟 RAF 的对比
- 定时器不准确的原因是什么?
- 为什么 Promise 可以解决回调地狱?
- Promise 链式调用是如何实现的?
- 为什么会出现内存泄漏?JS 中有哪些情况会造成内存泄漏?