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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_37246828/article/details/102640566

前言

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

第一部分 作用域和闭包

第一章 作用域

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

第二章 词法作用域

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

2.2 欺骗词法
在这里插入图片描述在严格模式的程序中,eval(…) 在运行时有其自己的词法作用域,意味着其 中的声明无法修改所在的作用域。
JavaScript 中另一个难以掌握(并且现在也不推荐使用)的用来欺骗词法作用域的功能是 with 关键字。

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

3.3
在这里插入图片描述3.4
非常少有人会注意到 JavaScript 的 ES3 规范中规定 try/catch 的 catch 分句会创建一个块作 用域,其中声明的变量仅在 catch 内部有效。

第四章

4.2
当你看到 var a = 2; 时,可能会认为这是一个声明。但 JavaScript 实际上会将其看成两个 声明:var a; 和 a = 2;。第一个定义声明是在编译阶段进行的。第二个赋值声明会被留在 原地等待执行阶段。
4.3
在这里插入图片描述

第五章

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

附录A-动态作用域

词法作用域和动态作用域对比:
词法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二部分 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丢失:
在这里插入图片描述显式绑定this:
在这里插入图片描述bind默认传参:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

第三章 对象

3.3
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

第四章 类

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

第五章 原型

第六章 行为委托

猜你喜欢

转载自blog.csdn.net/qq_37246828/article/details/102640566
今日推荐