前言

JavaScript 借鉴了许多语言的概念和语法,比如 C 风格的过程式编程以及不太明显的 Scheme/List 风格的函数式编程

第一部分 作用域和闭包

第一章 作用域

几乎所有编程语言最基本的功能之一,就是能够储存变量当中的值,并且能在之后对这个 值进行访问或修改。事实上,正是这种储存和访问变量的值的能力将状态带给了程序。
需要一套设计良好的规则来存储变量,并且之后可以方便地找到这些变量。 这套规则被称为作用域。
尽管通常将 JavaScript 归类为“动态”或“解释执行”语言,但事实上它是一门编译语言。
比起那些编译过程只有三个步骤的语言的编译器,JavaScript 引擎要复杂得多。
对于 JavaScript 来说,大部分情况下编译发生在代码执行前的几微秒(甚至更短!)的时 间内。

第二章 词法作用域

作用域共有两种主要的工作模型。第一种是最为普遍的,被大多数编程语言所采用的词法 作用域,我们会对这种作用域进行深入讨论。另外一种叫作动态作用域,仍有一些编程语 言在使用(比如 Bash 脚本、Perl 中的一些模式等)。

2.2 欺骗词法
《你不知道的JS》上卷(2019.05.06--2019.08.13)在严格模式的程序中,eval(…) 在运行时有其自己的词法作用域,意味着其 中的声明无法修改所在的作用域。
JavaScript 中另一个难以掌握(并且现在也不推荐使用)的用来欺骗词法作用域的功能是 with 关键字。

第三章 函数作用域和块作用域

3.3
《你不知道的JS》上卷(2019.05.06--2019.08.13)3.4
非常少有人会注意到 JavaScript 的 ES3 规范中规定 try/catch 的 catch 分句会创建一个块作 用域,其中声明的变量仅在 catch 内部有效。

第四章

4.2
当你看到 var a = 2; 时,可能会认为这是一个声明。但 JavaScript 实际上会将其看成两个 声明:var a; 和 a = 2;。第一个定义声明是在编译阶段进行的。第二个赋值声明会被留在 原地等待执行阶段。
4.3
《你不知道的JS》上卷(2019.05.06--2019.08.13)

第五章

ES6 中为模块增加了一级语法支持。但通过模块系统进行加载时,ES6 会将文件当作独立 的模块来处理。

附录A-动态作用域

词法作用域和动态作用域对比:
词法
《你不知道的JS》上卷(2019.05.06--2019.08.13)
《你不知道的JS》上卷(2019.05.06--2019.08.13)
《你不知道的JS》上卷(2019.05.06--2019.08.13)

第二部分 this和对象原型

第一章 this

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191019162617204.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQ2ODI4,size_16,color_FFFFFF,t_70

第二章 this全面解析

2.2严格模式下与 foo() 的调用位置无关
患得患失this丢失:
《你不知道的JS》上卷(2019.05.06--2019.08.13)显式绑定this:
《你不知道的JS》上卷(2019.05.06--2019.08.13)bind默认传参:
《你不知道的JS》上卷(2019.05.06--2019.08.13)《你不知道的JS》上卷(2019.05.06--2019.08.13)《你不知道的JS》上卷(2019.05.06--2019.08.13)《你不知道的JS》上卷(2019.05.06--2019.08.13)

第三章 对象

3.3
《你不知道的JS》上卷(2019.05.06--2019.08.13)《你不知道的JS》上卷(2019.05.06--2019.08.13)
《你不知道的JS》上卷(2019.05.06--2019.08.13)

第四章 类

类的另一个核心概念是多态,这个概念是说父类的通用行为可以被子类用更特殊的行为重 写。实际上,相对多态性允许我们从重写行为中引用基础行为。

第五章 原型

第六章 行为委托

相关文章: