建议收藏文章,结合复习导图食用,效果更佳。
1. JavaScript 基础
1.1 执行上下文/作用域链/闭包
- 理解 JavaScript 中的执行上下文和执行栈
- JavaScript深入之执行上下文栈
- 一道js面试题引发的思考
- JavaScript深入之词法作用域和动态作用域
- JavaScript深入之作用域链
- 发现 JavaScript 中闭包的强大威力
- JavaScript闭包的底层运行机制
- 我从来不理解JavaScript闭包,直到有人这样向我解释它...
- 破解前端面试(80% 应聘者不及格系列):从闭包说起
1.2 this/call/apply/bind
- JavaScript基础心法——this
- JavaScript深入之从ECMAScript规范解读this
- 前端基础进阶(七):全方位解读this
- 面试官问:JS的this指向
- JavaScript深入之call和apply的模拟实现
- JavaScript基础心法—— call apply bind
- 面试官问:能否模拟实现JS的call和apply方法
- 回味JS基础:call apply 与 bind
- 面试官问:能否模拟实现JS的bind方法
- 不用call和apply方法模拟实现ES5的bind方法
1.3 原型/继承
- 深入理解 JavaScript 原型
- 【THE LAST TIME】一文吃透所有JS原型相关知识点
- 重新认识构造函数、原型和原型链
- JavaScript深入之从原型到原型链
- 最详尽的 JS 原型与原型链终极详解,没有「可能是」。(一)
- 最详尽的 JS 原型与原型链终极详解,没有「可能是」。(二)
- 最详尽的 JS 原型与原型链终极详解,没有「可能是」。(三)
- JavaScript 引擎基础:原型优化
- Prototypes in JavaScript
- JavaScript深入之创建对象的多种方式以及优缺点
- 详解JS原型链与继承
- 从__proto__和prototype来深入理解JS对象和原型链
- 代码复用模式
- JavaScript 中的继承:ES3、ES5 和 ES6
1.4 Promise
- 100 行代码实现 Promises/A+ 规范
- 你好,JavaScript异步编程---- 理解JavaScript异步的美妙
- Promise不会??看这里!!!史上最通俗易懂的Promise!!!
- 一起学习造轮子(一):从零开始写一个符合Promises/A+规范的promise
- Promise实现原理(附源码)
- 当 async/await 遇上 forEach
- Promise 必知必会(十道题)
- BAT前端经典面试问题:史上最最最详细的手写Promise教程
async function async1() {
console.log('async1 start');
await async2();
console.log('async1 end');
}
// 相当于
async function async1() {
console.log('async1 start');
Promise.resolve(async2()).then(() => {
console.log('async1 end');
})
}
1.5 深浅拷贝
- JavaScript基础心法——深浅拷贝
- 深拷贝的终极探索(90%的人都不知道)
- JavaScript专题之深浅拷贝
- javaScript中浅拷贝和深拷贝的实现
- 深入剖析 JavaScript 的深复制
- 「JavaScript」带你彻底搞清楚深拷贝、浅拷贝和循环引用
- 面试题之如何实现一个深拷贝
1.6 事件机制/Event Loop
- Tasks, microtasks, queues and schedules
- How JavaScript works
- 从event loop规范探究javaScript异步及浏览器更新渲染时机
- 这一次,彻底弄懂 JavaScript 执行机制
- 【THE LAST TIME】彻底吃透 JavaScript 执行机制
- 一次弄懂Event Loop(彻底解决此类面试问题)
- 浏览器与Node的事件循环(Event Loop)有何区别?
- 深入理解 JavaScript Event Loop
- The Node.js Event Loop, Timers, and process.nextTick()
这个知识点真的是重在理解,一定要理解彻底
for (const macroTask of macroTaskQueue) {
handleMacroTask();
for (const microTask of microTaskQueue) {
handleMicroTask(microTask);
}
}