- 理解 JavaScript 中的执行上下文和执行栈(这个的变量对象部分看冼羽博客的https://github.com/mqyqingfeng/Blog/issues/5比较容易理解)
- JavaScript深入之执行上下文栈
- 一道js面试题引发的思考(看了冼羽的博客相关文章,这一篇可以不用看,内容差不多https://github.com/mqyqingfeng/Blog/issues/4)
- JavaScript深入之词法作用域和动态作用域
- JavaScript深入之作用域链
- 发现 JavaScript 中闭包的强大威力
- JavaScript闭包的底层运行机制
- 我从来不理解JavaScript闭包,直到有人这样向我解释它...(pass)
- 破解前端面试(80% 应聘者不及格系列):从闭包说起
- 过完之后刷题:this练习题
- 深入理解 JavaScript 原型
- 【THE LAST TIME】一文吃透所有JS原型相关知识点(*)
- 重新认识构造函数、原型和原型链
- JavaScript深入之从原型到原型链(这个没有交代原型出现的背景,在JavaScript深入之创建对象的多种方式以及优缺点这篇里面交代了)
- 最详尽的 JS 原型与原型链终极详解,没有「可能是」。(一)
- 最详尽的 JS 原型与原型链终极详解,没有「可能是」。(二)
- 最详尽的 JS 原型与原型链终极详解,没有「可能是」。(三)
- JavaScript 引擎基础:原型优化
- Prototypes in JavaScript
- JavaScript深入之创建对象的多种方式以及优缺点
- 详解JS原型链与继承
- 从__proto__和prototype来深入理解JS对象和原型链
- 代码复用模式
- JavaScript 中的继承:ES3、ES5 和 ES6(*)
- JavaScript深入之继承的多种方式以及优缺点
前提:了解promise、generator、async/await的基本使用https://es6.ruanyifeng.com/
了解async/await的前提是知道其与promise的转换关系,generator的自动执行(co)
看拉钩教程写了一版promise的源码:https://github.com/axiaoha/FE-STUDY/blob/feature/JS-IN-DEPTH-ANALYSIS/myPromise.mjs
- 过完之后刷题:promise练习题
- 100 行代码实现 Promises/A+ 规范
- 你好,JavaScript异步编程---- 理解JavaScript异步的美妙(找找异步编程发展历程的文章)
- Promise不会??看这里!!!史上最通俗易懂的Promise!!!
- 一起学习造轮子(一):从零开始写一个符合Promises/A+规范的promise
- Promise实现原理(附源码)
- 当 async/await 遇上 forEach
- Promise 必知必会(十道题)
- BAT前端经典面试问题:史上最最最详细的手写Promise教程
- 从一道让我失眠的 Promise 面试题开始,深入分析 Promise 实现细节(这篇不错,结合Promise的使用来讲Promise的实现)
- 阮一峰es6入门:promise、generator、async/await部分
- ES6 系列之我们来聊聊 Promise
- ES6 系列之 Generator 的自动执行(理解async/await实现原理的前提)
- ES6 系列之我们来聊聊 Async(继发与并发)
- ES6 系列之异步处理实战
- JavaScript基础心法——深浅拷贝
- 深拷贝的终极探索(90%的人都不知道)
- JavaScript专题之深浅拷贝
- javaScript中浅拷贝和深拷贝的实现
- 深入剖析 JavaScript 的深复制
- 「JavaScript」带你彻底搞清楚深拷贝、浅拷贝和循环引用
- 面试题之如何实现一个深拷贝
-
这一次,彻底弄懂 JavaScript 执行机制(这个里面的代码分析看看,但是内容不太全面比如说macrotask为什么比microtask晚执行等)
-
浏览器event loop
执行栈在执行完同步任务后,查看执行栈是否为空,如果执行栈为空,就会去检查微任务(
microTask
)队列是否为空,如果为空的话,就执行Task
(宏任务),否则就一次性执行完所有微任务。 每次单个宏任务执行完毕后,检查微任务(microTask
)队列是否为空,如果不为空的话,会按照先入先出的规则全部执行完微任务(microTask
)后,设置微任务(microTask
)队列为null
,然后再执行宏任务,如此循环。 -
面试官:你了解浏览器的事件循环吗?(全面一点)
如何区分宏任务与微任务呢?
- 宏任务:macrotask,又称为task, 可以理解为每次执行栈执行的代码就是一个宏任务(包括每次从事件队列中获取一个事件回调并放到执行栈中执行)。
一般包括:
script
(可以理解为外层同步代码)、setTimeout、setInterval 、setImmediate、I/O操作- 微任务:microtask, 又称为job, 可以理解是在当前 task 执行结束后立即执行的任务。包括:
Promise.then/cath /finally
回调(平时常见的)、 MutationObserver回调(html5新特性)
没有调用
resolve
或者reject
之前是不算异步任务完成的, 不能将.then回调放入事件队列
- 函数式编程指北
- JavaScript专题之函数柯里化
- Understanding Functional Programming in Javascript
- What is Functional Programming?
- 简明 JavaScript 函数式编程——入门篇
- You Should Learn Functional Programming
- JavaScript 函数式编程到底是个啥
- JavaScript-函数式编程
- 浅谈HTML5 Web Worker
- JavaScript 中的多线程 -- Web Worker
- JavaScript 性能利器 —— Web Worker
- A Simple Introduction to Web Workers in JavaScript
- Speedy Introduction to Web Workers
太多了... 总的来说就是 API 一定要熟悉...
- 近一万字的ES6语法知识点补充
- ES6、ES7、ES8特性一锅炖(ES6、ES7、ES8学习指南)
- 解锁多种JavaScript数组去重姿势
- Here’s how you can make better use of JavaScript arrays
- 一个合格的中级前端工程师需要掌握的 28 个 JavaScript 技巧
- 1.5万字概括ES6全部特性(已更新ES2020)
- JavaScript深入之从ECMAScript规范解读this(有时间要去看看ECMAScript 5.1 规范http://yanhaijing.com/es5/#160,结合规范理解this)
- 汤姆大叔的博客:https://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html
- 阮一峰es6https://es6.ruanyifeng.com/
- 闭包的应用
- position - CSS: Cascading Style Sheets | MDN
- position | CSS Tricks
- 杀了个回马枪,还是说说position:sticky吧
- 30 分钟学会 Flex 布局
- css行高line-height的一些深入理解及应用
- A Complete Guide to Flexbox
- 写给自己看的display: flex布局教程
- 从网易与淘宝的font-size思考前端设计稿与工作流
- 细说移动端 经典的REM布局 与 新秀VW布局
- 移动端1px解决方案
- Retina屏的移动设备如何实现真正1px的线?
- CSS retina hairline, the easy way.
- 浏览器的回流与重绘 (Reflow & Repaint)
- 回流与重绘:CSS性能让JavaScript变慢?
- CSS实现水平垂直居中的1010种方式(史上最全)
- 干货!各种常见布局实现
- CSS 常见布局方式
- 彻底搞懂CSS层叠上下文、层叠等级、层叠顺序、z-index
- 深入理解CSS中的层叠上下文和层叠顺序
- Sass vs. Less
- 2019年,你是否可以抛弃 CSS 预处理器?
- 浅谈 CSS 预处理器(一):为什么要使用预处理器?
- 浏览器将rem转成px时有精度误差怎么办?
- Fighting the Space Between Inline Block Elements
- Vuex、Flux、Redux、Redux-saga、Dva、MobX
- 10行代码看尽redux实现
- Mobx 思想的实现原理,及与 Redux 对比
- 使用原生 JavaScript 构建状态管理系统
- Vue Virtual DOM 源码剖析
- 面试官: 你对虚拟DOM原理的理解?
- 让虚拟DOM和DOM-diff不再成为你的绊脚石
- 探索Virtual DOM的前世今生
- 虚拟 DOM 到底是什么?(长文建议收藏)
- 顺带复习一下基本的DOM操作(snabbdom里面的patch方法很多涉及到了DOM操作)
- 详解vue的diff算法
- Deep In React 之详谈 React 16 Diff 策略(二)
- React 源码剖析系列 - 不可思议的 react diff
- 浅入浅出图解 Dom Diff
- Vue2.x源码解析系列十:Patch和Diff 算法(*)
- React Hooks 原理
- React hooks: not magic, just arrays
- Deep dive: How do React hooks really work?
- 【React深入】从Mixin到HOC再到Hook
- React Hooks 详解 【近 1W 字】+ 项目实战
- 30分钟精通React今年最劲爆的新特性——React Hooks
- React Hooks 详解(一)
从思想、生态、语法、数据、通信、diff等角度自己总结一下吧。
- 深入浅出浏览器渲染原理(浏览器渲染过程、重绘回流、async和defer)
- 介绍下重绘和回流(Repaint & Reflow),以及如何进行优化
- [ ]
- 听说『99% 的人都理解错了 HTTP 中 GET 与 POST 的区别』??
- 前端基础篇之HTTP协议
- 都9102年了,还问GET和POST的区别
- HTTP 响应代码 | MDN
- 如何理解HTTP响应的状态码?
- 你所知道的3xx状态码
- 关于浏览器缓存你知道多少
- 浏览器缓存
- HTTP协议头部与Keep-Alive模式详解
- HTTP keep-alive 二三事