深入系列目录

  1. JavaScirpt深入之从原型到原型链
  2. JavaScript深入之词法作用域和动态作用域
  3. JavaScript深入之执行上下文栈
  4. JavaScript深入之变量对象
  5. JavaScript深入之作用域链
  6. JavaScript深入之从ECMAScript规范解读this
  7. JavaScript深入之执行上下文
  8. JavaScript深入之闭包
  9. JavaScript深入之参数按值传递
  10. JavaScript深入之call和apply的模拟实现
  11. JavaScript深入之bind的模拟实现
  12. JavaScript深入之new的模拟实现
  13. JavaScript深入之类数组对象与arguments
  14. JavaScript深入之创建对象的多种方式以及优缺点
  15. JavaScript深入之继承的多种方式以及优缺点
  16. JavaScript深入系列15篇正式完结!
  17. JavaScript深入之浮点数精度
  18. JavaScript深入之头疼的类型转换(上)
  19. JavaScript深入之头疼的类型转换(下)

专题系列目录

  1. JavaScript专题之跟着underscore学防抖
  2. JavaScript专题之跟着underscore学节流
  3. JavaScript专题之数组去重
  4. JavaScript专题之类型判断(上)
  5. JavaScript专题之类型判断(下)
  6. JavaScript专题之深浅拷贝
  7. JavaScript专题之从零实现jQuery的extend
  8. JavaScript专题之如何求数组的最大值和最小值
  9. JavaScript专题之数组扁平化
  10. JavaScript专题之学underscore在数组中查找指定元素
  11. JavaScript专题之jQuery通用遍历方法each的实现
  12. JavaScript专题之如何判断两个对象相等
  13. JavaScript专题之函数柯里化
  14. JavaScript专题之偏函数
  15. JavaScript专题之惰性函数
  16. JavaScript专题之函数组合
  17. JavaScript专题之函数记忆
  18. JavaScript专题之递归
  19. JavaScript专题之乱序
  20. JavaScript专题之解读 v8 排序源码
  21. JavaScript专题系列20篇正式完结!
  22. JavaScript专题之花式表示26个字母

    ES6 系列目录

  23. ES6 系列之 let 和 const

  24. ES6 系列之模板字符串
  25. ES6 系列之箭头函数
  26. ES6 系列之模拟实现 Symbol 类型
  27. ES6 系列之迭代器与 for of
  28. ES6 系列之模拟实现一个 Set 数据结构
  29. ES6 系列之 WeakMap
  30. ES6 系列之我们来聊聊 Promise
  31. ES6 系列之 Generator 的自动执行
  32. ES6 系列之我们来聊聊 Async
  33. ES6 系列之异步处理实战
  34. ES6 系列之 Babel 将 Generator 编译成了什么样子
  35. ES6 系列之 Babel 将 Async 编译成了什么样子
  36. ES6 系列之 Babel 是如何编译 Class 的(上)
  37. ES6 系列之 Babel 是如何编译 Class 的(下)
  38. ES6 系列之 defineProperty 与 proxy
  39. ES6 系列之模块加载方案
  40. ES6 系列之我们来聊聊装饰器
  41. ES6 系列之私有变量的实现
  42. ES6 完全使用手册

完全熟练掌握 eventLoop。

tasks-microtasks-queues-and-schedules

Promise

  1. 你需要阅读 Promise A+规范,注意其中的细节,并且灵活的运用到开发当中去。
    Promise A+ 英文文档
  2. 你需要跟着精品教程手写一遍 Promise,对里面的细节深入思考,并且把其中异步等待、错误处理等等细节融会贯通到你的开发思想里去。
    剖析 Promise 内部结构,一步一步实现一个完整的、能通过所有 Test case 的 Promise 类
  3. 最后,对于 promise 的核心,异步的链式调用,你必须能写出来简化版的代码。
    最简实现 Promise,支持异步链式调用(20 行)

题外话,当时精炼这 20 行真的绕了我好久 😂,但是搞明白了会有种恍然大悟的感觉。这种异步队列的技巧要融会贯通。

async await

对于 Promise 我们非常熟悉了,进一步延伸到 async await,这是目前开发中非常非常常用的异步处理方式,我们最好是熟悉它的 babel 编译后的源码。
手写 async await 的最简实现(20 行搞定)
babel 对于 async await 配合 generator 函数,做的非常巧妙,这里面的思想我们也要去学习,如何递归的处理一个串行的 promise 链?
这个技巧在axios 的源码里也有应用。平常经常用的拦截器,本质上就是一串 promise 的串行执行。
当然,如果你还有余力的话,也可以继续深入的去看 generator 函数的 babel 编译源码。不强制要求,毕竟 generator 函数在开发中已经用的非常少了。
ES6 系列之 Babel 将 Generator 编译成了什么样子

异常处理

你必须精通异步场景下的错误处理,这是高级工程师必备的技能,如果开发中的异常被你写的库给吞掉了,那岂不是可笑。
Callback Promise Generator Async-Await 和异常处理的演进

插件机制

你需要大概理解前端各个库中的插件机制是如何实现的,在你自己开发一些库的时候也能融入自己适合的插件机制。
Koa 的洋葱中间件,Redux 的中间件,Axios 的拦截器让你迷惑吗?实现一个精简版的就彻底搞懂了。

设计模式

对于一些复杂场景,你的开发不能再是if else嵌套一把梭了,你需要把设计模式好好看一遍,在合适的场景下选择合适的设计模式。这里就推荐掘金小册吧,相信这篇小册会让你的工程能力得到质的飞跃,举例来说,在 Vue 的源码中就用到了观察者模式发布订阅模式策略模式适配器模式发布订阅模式工厂模式组合模式代理模式门面模式等等。
而这些设计模式如果你没学习过可能很难想到如何应用在工程之中,但是如果你学习过,它就变成了你内在的工程能力,往大了说,也可以是架构能力的一部分。

在《设计模式》这本小册中我们提到过,即使是在瞬息万变的前端领域,也存在一些具备“一次学习,终生受用”特性的知识。从工程的角度看,我推荐大家着重学习的是设计模式。 -修言

这里推荐掘金修言的设计模式小册

开发思想

有时候组合是优于继承的,不光是面向对象编程可以实现复用,在某些场景下,组合的思想可能会更加简洁优雅。
https://medium.com/javascript-scene/master-the-javascript-interview-what-s-the-difference-between-class-prototypal-inheritance-e4cd0a7562e9

“…the problem with object-oriented languages is they’ve got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.” ~ Joe Armstrong — “Coders at Work” 面向对象语言的问题在于它们带来了所有这些隐含的环境。 你想要一个香蕉,但你得到的是拿着香蕉和整个丛林的大猩猩。

代码规范

你需要熟读 clean-code-javascript,并且深入结合到日常开发中,结合你们小组的场景制定自己的规范。
clean-code-javascript