共计 2098 个字符,预计需要花费 6 分钟才能阅读完成。
毕生的常识积攒,自学的起码占 90%
咱们站在五年工作的根底上,脑子里能想到哪些与 JavaScript 相干的关键字
类型、对象、函数、原型、原型链、继承、词法作用域、作用域链、执行上下文、执行上下文栈、this、闭包、垃圾回收、事件循环 …
这些知识点之间有什么分割呢?笔者认为:
每一个知识点之间相互是有关联的,就像一座座城市,城市有城市群,大的城市群就是一个大的知识点,每个小的知识点之间也是有分割的
如果把前端知识点类比中国地图上的城市省份,JavaScript 根底就是”长三角地区“,这是中国最重要的中央之一,也是一名高级前端必备的知识点
笔者会写一个系列,从 JavaScript 是什么,到 JavaScript 由什么组成,解释语言的形成,引出数据类型。JavaScript 的数据类型由根本类型和援用类型形成,从两者的差别到如何分别两者,引出四种分别办法:typeof(操作符)、instanceof(运算符)、constructor(构造方法)、Object.prototype.toString.call(source)(原型办法),总结它们的优缺点,最初手写一个判断数据类型的办法——isType
有句话说:在 JavaScript 中,所有皆对象。了解了对象,就了解了 JavaScript。所以咱们会以所有皆对象为话题印证下此观点是否正确
在对对象有所理解后,咱们晓得了 JavaScript 中的「对象」具备多种涵义,它既包含了 Object、Function、Array 等内置对象,也包含宿主对象,自定义对象
既然如此,咱们就从内置构造函数 Object 讲起,从属性讲到办法,再从创建对象到拷贝对象。其中创建对象办法中的 new、Object.create 单开一文进行论述,拷贝对象也非一两句能说明确,所以亦会写篇文章介绍
而从 JavaScript 中的绝大多数“元素”是对象(除了 null、undefined 之外)为契机,思考这是为什么。起因是 JavaScript 是基于原型继承的语言,从而理解原型以及继承(尽管咱们在 new 中也会提及原型)。在继承一文中,画原型链关系图时,对 Function.__proto__ === Function.prototype
此行为感到纳闷,并对原型链的源头是谁感到好奇,到底是谁在继承的源头,所以就有了 JavaScript 中的始皇一文
对原型和继承有所理解后,会对它的利用感到好奇,这里以 instanceof 为例子,会写一篇 instanceof——找祖籍
如此,咱们讲完了 Object,接着讲 Function,说说为什么函数是一等公民,和 Object 一样,咱们从属性讲到办法,并介绍了创立函数、调用函数的应用。有了这些根底后,再介绍为什么函数是一等公民。它身为一等公民不仅是因为它是对象(能赋值给变量),更因为它有函数特有的”天才“,函数能够作为别的函数的参数、函数有返回值。除此之外,它还有函数作用域,this)、立刻执行函数、arguments 等函数独有的个性
如此,咱们就挨个解说这些个性,讲到 this 时,咱们会就它的用法“谁调用我,我指向谁”,衍生到 Function 原型上的三个原型办法:call/apply/bind,它们是如何实现的,又如何手写,咱们独自写一篇——call、apply、bind 三大将
至于 this 为什么是动静的,而不是像作用域那样,依据所写的地位而定下的呢,要想理解此景象,就须要理解 执行上下文与调用栈,而在讲执行上下文前,须要再理解一个概念——词法环境
也就是说当咱们晓得了词法环境、执行上下文后,能力解释分明 this 的经典名言,咱们甚至能够比照下执行上下文与作用域。说了这么多,晓得了诸多概念后,咱们就能够去介绍闭包了,而由闭包衍生进去的利用,如防抖与节流、函数式编程,以及它造成的影响——垃圾回收机制 又是一个个好问题,会独自列出来解说
如此,就讲完了 Object 和 Function,再讲 Array、String,其余的内置构造函数则无需细讲
总的来说,笔者心愿能一环扣一环,因为有这些那样的问题,所以才有相应的解决之道。就像如果要了解闭包,就必须要晓得作用域和执行上下文,而执行上下文则是由 this 引出,而介绍它(执行上下文)又要先引出词法环境和执行代码阶段的知识点
比照一下 Function 能引出的知识点是最多的,其次是 Object,而 Array、String 能有一些常见的办法进去就不错了,你看,常识的非均衡性体现的酣畅淋漓
笔者始终认为,要明确一个知识点,应该从想晓得它是什么,能做什么开始,而后再去理解它的背景常识等,而不是先去理解它的背景常识,而后再通知你它能做什么。因为咱们是从需要登程,要先会做,再去理解原理
笔者心得
刚毕业那一年面试,胆怯被人问:原型、原型链、闭包、执行上下文、继承 … 过了一年,开始问 ES6 各类问题、React/Vue,再起初,开始问手写防抖节流、深拷贝、webpack 的打包原理等,当初前端开始面算法。总之,总有人比你懂的多,总有问题会把你问住,而咱们要做的,就是把根底打好
接下来,笔者会在每周二、四更新,争取把这一系列文章写好