终身知识积累,自学至少占90%我们站在五年工作的基础上,JavaScript相关的关键字类型、对象、函数、原型、以及我们脑海中能想到的原型链、继承、词法作用域、作用域链、执行上下文、执行上下文栈、this、闭包、垃圾回收、事件循环……这些知识点之间有什么联系?笔者认为,每个知识点都是相互关联的,就像城市一样,城市有城市群,一个大的城市群就是一个大知识点,各个小知识点之间也是有联系的。将前端知识点与中国地图上的城市和省份进行对比。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的关系很疑惑,很好奇原型链的出处是谁,又是谁的继承的来源,所以就有了原型和继承熟悉后,我会对它的应用感到好奇。这里我就以instanceof为例,写一篇instanceof的文章——找祖宗。说完Object我们再来说说Function,说来说说为什么函数是一等公民。和Object一样,我们从属性讲方法,介绍创建函数和调用函数的使用。有了这些基础,我们就来介绍一下为什么函数是一等公民。它是一等公民,不仅因为它是一个对象(可以赋值给一个变量),还因为它具有函数的独特“天赋”。函数可以作为其他函数的参数,函数有返回值。此外,它还有函数作用域、this、立即执行函数、参数等函数特有的功能。这样,我们将对这些功能一一进行说明。说到这里,我们会说到它的用法“谁调用我,我指向谁”,Function原型派生的三个原型方法:call/apply/bind,它们是如何实现的,又是如何写的手写,我们会单独写一篇文章——调用、申请和绑定。至于为什么这是Dynamic,而不是像scope一样根据写的位置来决定。要理解这种现象,需要理解执行上下文和调用栈。在讲执行上下文之前,需要了解另一个概念——词法环境,意思是当我们知道了词法环境和执行上下文,我们就可以把这个经典的说法解释清楚了。我们甚至可以比较范围和执行上下文。说了这么多,了解了很多概念之后,我们可以介绍一下闭包,以及由闭包派生出来的应用,比如防抖节流,函数式编程,以及它的影响——垃圾回收机制这又是一个好问题,以后会单独列出来解释一下。说完Object和Function,再说Array和String。其余的内置构造函数不需要详细解释。说到Array,有一个话题不得不提,那就是循环。各种循环的用途和区别是什么?我们会单独写一篇文章:loopscomehere。总的来说,作者希望能把一环连在一起,因为有这样那样的问题,也有相应的解决方案。就像要想理解闭包,就必须知道作用域和执行上下文,而执行上下文就是由此引入的,而引入它(执行上下文)首先要介绍词法环境和执行代码的知识点阶段。CompareFunction可以抽出的知识点最多,其次是Object,Array和String可以有一些通用的方法。你看,知识的失衡体现的淋漓尽致。笔者始终认为,要了解一个知识点,应该先想知道它是什么,它能做什么,然后再去了解它的背景知识等,而不是先了解它的背景知识,再告诉你它是什么可以做。因为我们是从需求出发的,首先要知道怎么做,再去理解原理。笔者的经历是刚毕业那年面试的,很怕被问到:prototype,prototypechain,closure,executioncontext,inheritance...过了一年,开始问各种ES6,React/vue,后来开始问手写防抖节流,深拷贝,webpack打包原理等等,现在前端开始面对算法了。总之,总会有人比你懂得多,总会有问题会把你抓到,而我们要做的就是打好基础。接下来,笔者每周二、四更新,力争把这一系列文章写好。系列文章深入理解JavaScript-开篇深入理解JavaScript-什么是JavaScript深入理解JavaScript-JavaScript由什么组成深入理解JavaScript-一切皆对象深入理解JavaScriptJavaScript之——对象(object)深入理解JavaScript——newdone什么是深入理解JavaScript——Object.create深入理解JavaScript——复制的秘密深入理解JavaScript——PrototypeIn-深入理解JavaScript——继承深入理解JavaScript——JavaScript第一帝深入理解JavaScript——instanceof——寻祖深入理解JavaScript——Function深入理解JavaScript——Scope深入深入理解JavaScript——this关键字深入理解JavaScript——call、apply、bind深入理解JavaScript——执行上下文和callstack深入理解JavaScript——scopeVSexecutioncontext深入理解JavaScript——闭包深入理解JavaScript——防抖与节流深入理解JavaScript——函数式编程深入理解JavaScript——垃圾集合机制深入理解JavaScript——数组深入理解JavaScript——循环来这里深入理解JavaScript——字符串
