自此,我们已经讨论了在JavaScript 起源描述的大部分ECMAScript标准的核心部分,而这些内容也是我们在日常前端开发工作中围绕的核心。
不了解JavaScript作用域(链)与声明提升,我们在实现一个个程序功能点的时候就会很容易引入错误,很难写出逻辑正确的基础代码;不理解JavaScript中this
的动态性,我们无法正确地利用函数的复用性和灵活性,理解this
也是我们使用JavaScript做面向对象编程的基础之一;对于我们经常聊的闭包,不理解它就不算理解了函数是第一公民的含义,对于一些框架级的问题,诸如React Hooks在更新状态时的闭包陷阱问题,也很难去理解和排查;原型机制是JavaScript语言核心中的核心,它连接了系统中的对象,它得以让我们对象的扩展,整个JavaScript面向对象开发范式就建立在原型机制之上;而不熟练掌握面向对象编程范式,我们就很难使用JavaScript去构建大型前端应用程序;异步编程也是JavaScript程序编程中的重点,随时要记得我们的程序是在单线程上跳舞,它需要不一样的异步机制舞步;对于内存问题,JavaScript引擎并没有放开一些我们可操作的接口,但是,不理解JavaScript内存机制,当我们在大型项目中遇到那些“幽灵般”的程序崩溃问题时便会束手无策。这些内容在ECMAScript标准上描述,但是对于它们的含义,我们却会常识常新。任何优秀的作品露出的都是冰山一角,透彻地理解它并不是读读文档那么简单地事。
而对于其它的一些内容,譬如数组(Array
)、对象(Object
)、函数(Function
)的常见方法以及它们在ECMAScript中得到了怎样的扩展,或者说Set
/Map
对象的使用,它们的内容算不上那么立体。大部分时候我们只需要按着官方的手册去操作,就不会有太多问题,它们是那些常见的数据结构或算法的JavaScript版本实现。或许在以后阶段的学习中我会再提起他们。包括Symbol
、迭代器(Iterator)和生成器(Generator)、以及代理(Proxy)和反射(Reflection)。
有关文档对象模型(DOM)和浏览器对象模型(BOM),它们也是JavaScript中不可缺少的内容,但不是JavaScript语言的核心。DOM是HTML、SVG那些标记文档的JavaScript建模,或许在我们讨论HTML的时候会首先谈论它。现代浏览器已经是一个很复杂的计算机程序,作为浏览器对象模型,我们很难不单独讨论它,这不会是一件轻松的事。
30年间,JavaScript从一个“胶水语言”,已经变成了运载最广泛应用程序的主要编程语言之一了。它不断完善、进化,是一代代Web工程人员的工作和智慧的结晶,很难用简练的言语去全面地描绘它,但在此笔者力求简练。美好的事物总是精巧繁杂的,对它们的了解也不会易如拾芥。山路回而愈高,水流缓而愈远。当我们多得一分知道、多读一分透彻,幸福就在其间。