本文档介绍并探讨了构成 JavaScript 基础的三大核心支柱:作用域与闭包、原型以及类型与类型转换。理解这些核心支柱对于掌握 JavaScript 至关重要,因为语言的几乎每个方面都建立在这些概念之上。本页概述了每个支柱以及它们如何协同工作形成完整的语言。
有关特定 JavaScript 语言功能的详细信息,请参阅 JavaScript 基础。有关 JavaScript 执行模型的信息,请参阅 JavaScript 执行模型。
来源: get-started/ch1.md16-17 get-started/ch4.md4-10
JavaScript 以围绕的三大基础支柱为组织核心,这些支柱支撑着整个语言。这些支柱首次在“You Don't Know JS Yet”的第一章中被提及,并在整个系列书籍中得到了深入探讨。每个支柱都代表了 JavaScript 功能的一个核心方面。
理解这些支柱至关重要,因为
来源: get-started/ch1.md16-17 get-started/ch4.md11-28
JavaScript 的第一个支柱涉及变量的组织、访问以及通过作用域链的持久性。
词法作用域是 JavaScript 将变量组织到逻辑“桶”中的方式。变量被组织到函数作用域和块级作用域中,决定了它们可以在何处被访问。
JavaScript 词法作用域的关键特征
var 声明的变量是函数作用域let 和 const 声明的变量是块级作用域闭包是指当一个函数记住并能够访问其自身作用域之外的变量时发生的情况,即使该函数在不同的作用域中执行。
闭包支持
正如在 get-started/ch3.md170-171 所述,闭包是“JavaScript 最强大的机制之一”,并且对于通过模块等模式组织代码至关重要。
来源: get-started/ch4.md12-32 get-started/ch3.md170-266
第二个支柱涉及 JavaScript 的对象链接机制以及 this 绑定。
JavaScript 使用原型委托,而不是传统的类继承(尽管 ES6 类是建立在此机制之上)。对象可以通过原型链接将属性/方法访问委托给其他对象。
this 关键字this 是函数中一种特殊的绑定,它指向一个对象,该对象的确定方式取决于函数如何被调用,而不是它在哪里被定义。这是使原型委托有效工作的关键行为。
当通过原型链访问方法时,this 仍然指向调用方法的原始对象,而不是定义方法的原型对象。这允许对象之间进行动态上下文共享。
来源: get-started/ch4.md35-50 get-started/ch3.md267-468
第三个支柱涵盖了 JavaScript 的类型系统以及值如何在类型之间转换。
JavaScript 具有几种原始类型和对象类型
| 类型 | 示例 | typeof 结果 |
|---|---|---|
| Undefined | 未定义 | "undefined" |
| Null | null | "object" (JavaScript 中的一个 bug) |
| 布尔值 | true, false | "boolean" |
| 数字 | 42, 3.14 | "number" |
| BigInt | 42n | "bigint" |
| 字符串 | "hello" | "string" |
| 符号 | Symbol("description") | "symbol" |
| 对象 | {}, [], function(){} | "object" (或 "function" 对于函数) |
理解这些类型及其行为对于编写有效的 JavaScript 代码至关重要。
JavaScript 在许多操作中执行自动类型转换(类型转换),包括
== 与 ===)+, - 等)if 语句)这个支柱常常被误解,但对 JavaScript 类型如何工作的正确理解可以带来更可预测和可维护的代码。
来源: get-started/ch4.md53-68 get-started/ch2.md41-181
这三大支柱并非孤立运作,而是在 JavaScript 的许多方面以多种方式相互作用。
关键关系包括
了解这三大支柱极大地影响了你处理 JavaScript 编程的方式,因为它们是语言行为的基础。
《You Don't Know JS Yet》系列的作者 Kyle Simpson 建议顺应 JavaScript 的“潮流”——理解并利用这些核心机制,而不是与之对抗或试图让 JavaScript 表现得像其他语言。
例如
理解这些支柱有助于
this 绑定等)来源: get-started/ch4.md70-98 get-started/preface.md19-28
“You Don't Know JS Yet”系列书籍专门用一整本书来深入探讨这些支柱中的每一个
理解这些支柱对于真正了解 JavaScript 语言至关重要,而不仅仅是死记硬背语法或模式。