JavaScript核心原理解析 / 重构你对JavaScript语言的认知
周爱民
《JavaScript语言精髓与编程实践》作者,南潮科技(Ruff)首席架构师
 
  • 课程目录
  • 课程介绍
  • 开篇词 | 如何解决语言问题?

    形成自己的语言体系,能让你在“编程游戏”中扮演上帝!

  • 01 | delete 0:JavaScript中到底有什么是可以销毁的

    JavaScript中到底有什么是可以销毁的?在引用与值之间,谁主生死沉浮?

  • 02 | var x = y = 100:声明语句与语法改变了JavaScript语言核心性质

    声明语句与语法改变了JavaScript语言的核心性质,但是也让它背上了历史中最大的一口黑锅。

  • 03 | a.x = a = {n:2}:一道被无数人无数次地解释过的经典面试题

    这是一道被无数人、无数次地解释过的经典面试题,十年来折戟者如恒河沙数!

  • 04 | export default function() {}:你无法导出一个匿名函数表达式

    你无法导出一个匿名函数表达式!

  • 05 | for (let x of [1,2,3]) ...:for循环并不比使用函数递归节省开销

    让我们一起来看看for循环为了支持局部的标识符声明而付出的代价。

  • 06 | x: break x; 搞懂如何在循环外使用break,方知语句执行真解

    如果不弄清楚如何在循环外使用break,你很难理解语句执行的真谛。

  • 07 | `${1}`:详解JavaScript中特殊的可执行结构

    一起来学习JavaScript中语句与表达式之外的第三类存在——特殊的可执行结构。

  • 08 | x => x:函数式语言的核心抽象:函数与表达式的同一性

    一个最小化的函数,包括了一个函数完整的三个语法组件:参数、执行体和结果。

  • 09 | (...x):不是表达式、语句、函数,但它却能执行

    不是表达式、语句、函数,但却能执行的(...x),到底是什么?

  • 10 | x = yield x:迭代过程的“函数式化”

    迭代过程的“函数式化”,仅有递归不够,还要让函数能多次传入传出才行。

  • 11 | throw 1;:它在“最简单语法榜”上排名第三

    ECMAScript规范中,实现起来“最简单”的JavaScript语法榜前三名语句都有什么秘密?

  • 12 | 1 in 1..constructor:这行代码的结果值,既可能是true,也可能是false

    源于JavaScript中面向对象系统的独特设计,它的对象属性存取结果总是不确定的。

  • 13 | new X:从构造器到类,为你揭密对象构造的全程

    作为JavaScript面向对象系统的核心概念,构造器里隐藏着什么秘密?

  • 14 | super.xxx():虽然直到ES10还是个半吊子实现,却也值得一讲

    `super.xxx`直到ES10还是个半吊子实现,它的背后又隐藏着哪些秘密?

  • 15 | return Object.create(new.target.prototype):做框架设计的基本功:写一个根类

    写好一个根类是做JavaScript框架设计的基本功。

  • 16 | [a, b] = {a, b}:让你从一行代码看到对象的本质

    通过标题中的赋值表达式,从抽象层面认识JavaScript的对象与数组。

  • 17 | Object.setPrototypeOf(x, null):连Brendan Eich都认错,但null值还活着

    如果仔细思考JavaScript的类型系统,你会发现null值的出现是有一定的道理的。

  • 18 | a + b:动态类型是灾难之源还是最好的特性?(上)

    JavaScript动态语言特性中最有代表性的动态类型,你真的了解吗?

  • 19 | a + b:动态类型是灾难之源还是最好的特性?(下)

    JavaScript中,可不仅仅只有“类型转换”表现出来动态类型的特性。

  • 20 | (0, eval)("x = 100") :一行让严格模式形同虚设的破坏性设计(上)

    按标题代码去尝试写eval(),无论你处于严格模式还是非严格模式,你都将创建出一个变量x。

  • 21 | (0, eval)("x = 100") :一行让严格模式形同虚设的破坏性设计(下)

    标题代码是“间接调用的eval”,它总运行在一个非严格模式的全局中,于是变量`x`也就总是可以被创建或重写。

  • 22 | new Function('x = 100')();:函数的类化是对动态与静态系统的再次统一

    今天要跟你聊的是JavaScript的动态语言特性中动态函数的实现原理。

  • 加餐 | 捡豆吃豆的学问(上):这门课讲的是什么?

    今天要给你“开小灶”,好好跟你讨论一下该怎么学习JavaScript。

  • 加餐 | 捡豆吃豆的学问(下):这门课该怎么学?

    教者要有其法,而学者要得其道。

  • 加餐 | 让JavaScript运行起来

    通过这一讲,系统了解前11讲的内容体系和结论。

  • 结束语 | 愿你能做一个真正“懂”的程序员

    要有所见,但也不要固执于已见,那样就没有进步了。这个进步的过程,才是真的懂。

  • 结课问卷获奖用户名单

    《JavaScript核心原理解析》专栏结课问卷获奖用户名单。

作为前端工程师必备技能,JavaScript 的重要性不言而喻。但是,很多人对 JavaScript 的印象都只是“简单易学”,对其掌握也仅仅停留在“会用就好”,以至于不求甚解、迷失于 JavaScript 。究其原因,他们从来都只是“写代码”,而没有去真正去了解、去探索“什么是语言”。

JavaScript 作为一门语言,虽然易上手,但却有着诸多复杂微妙的机制,想要真正掌握绝非易事。而这些机制,正是 JavaScript 语言的精髓。只有当你深入理解语言内部的实现原理,才能做到无论出现什么新技术、新框架,都能轻松应对。

而这个专栏将以“语言”为核心,主要讨论语言设计、结构化和面向对象特性,以及部分的动态语言特性。通过本专栏,希望你能找到自己对语言的认识,构建一个语言知识结构。

作者简介

周爱民,前端“绿皮书”《JavaScript语言精髓与编程实践》作者,专注于软件开发与架构、项目管理二十余年,曾任盛大网络平台架构师、支付宝业务架构师、豌豆荚首席架构师等职。著有《Delphi源代码分析》《大道至简:软件工程实践者的思想》《大道至易:实践者的思想》《程序原本》《我的架构思想:基本模型、理论与原则》等书。

unpreview

你将获得

  • 深度解读 JavaScript 核心技术
  • JavaScript 语言特性以及原理剖析
  • 帮你构建语言知识结构体系
  • JavaScript 的精进指南

课程设计

1.专栏内容适合谁?

专栏面向JavaScript语言的实际应用者与深度爱好者,以讲述JavaScript语言特性、原理以及核心实现技术为主。周爱民将综合代码的特殊性、代码所涉问题的领域、与该代码相似的或同类的问题,将代码逐步分解、解析,一方面发掘它们潜在的应用,另一方面帮助你构建一个语言知识结构。

  • 阅读基础要求:至少有一门编程语言经验,接触并使用过JavaScript。
  • 不适合人群:无编程经验的初学者。

2.专栏会讲哪些知识?

专栏每一讲都是一个独立话题,以一行代码为标题,整个话题会围绕该行代码展开。内容包括:代码的特殊性,代码所涉问题的领域,代码的逐步分解解析,与该代码相似的或同类的问题,潜在的应用,不为人知的历史,标准规范对此的态度,业界的一些看法与争议等等。

3.专栏模块是如何设置的?

专栏正文共21期,分为4个模块。

从零开始”主要讲述构成JavaScript语言的基础——JavaScript语言的静态结构,主要包括词法环境、块级作用域、语句、声明、字面量、变量环境、模块(名字空间)等等。

从表达式到执行引擎”主要讲述JavaScript的执行过程,主要包括执行栈、执行队列、执行上下文、函数(函数对象/闭包)作为执行结构如何参与运算等等,还将讲述表达式(运算符+操作数)与优先级这个体系,说明表达式运算与语句运算间的不同。

从原型到类”主要讲述JavaScript面向对象编程体系中最核心的一些设计,包括类继承、原型继承、属性表的使用、内部方法等等,并对索引数组和关联数组在JavaScript中的应用与整合做深度分析。

从粗通到精通的进阶之路”主要讲述JavaScript作为动态语言的主要特性,包括动态的类型、动态的执行过程和动态的环境上下文等等。

4.阅读指南

  • 周爱民老师在音频中对代码会做更详细的讲解,建议配合音频阅读。
  • 阅读专栏前,推荐先看老师为你准备的“学习指南”,掌握学习方法才更容易理解文章内容。

限时福利