书籍《JavaScript高级程序设计》[x] 书籍 [ ] 讲座 [ ] 视频
作者 Matt Frisbie 李松峰 译 出版社 人民邮电出版社
ISBN 9787115545381 出版时间 2019-5
豆瓣网址 豆瓣 是否有电子版 图灵微信读书
阅读日期 2021-01-09 更新日期
相关链接 教学视频 备注

支持正版。
image.png

这本书也叫红宝书,因为封皮是红色的。也叫高程,高程四。很多内容相较于第三版做了改动,删除过时内容,增加 es2019的内容。

以下是阅读期间的随手笔记,期望很多内容可以单独整理成篇。

全书目录结构

《JavaScript高级程序设计》第4版 - 图2

全书量特别大,很多内容显然可以单独整理成篇。

1 JS历史和发展

JavaScript 和 ECMAScript 基本上是同义词。但是 js远不止 ECMA-262 的定义那么简单:(对于web开发来说)

js = ECMAScript+DOM+BOM

ECMAScript 是定义,还需要有宿主环境 Host Environment

ES迭代

JS历史和变迁 https://www.yuque.com/xinbao37/roadmap/js-history-now-feture

关于 ES 规范可以尝试阅读我的一个总结。《导引:如果你想阅读ES规范

DOM级别

  • DOM Level1
  • DOM Level2
  • DOM Level3

大致知道 每次迭代都增加了功能,但是 w3c 不再按照 level 来维护DOM了,也就是没有 DOM4这个版本了,称之为 DOM Living Standard 来维护。

2 HTML中的js

2.1 script标签

谁能想到,这个小知识点也能抽出去 JS加载一本通

3 语言基础

语法、数据类型、流控制语句、理解函数

3.3变量声明

var let const 常规比较。

demo:

  1. for(let i=0;i<5;++i){
  2. setTimeout(()=>{log(i)},0)
  3. }

这里 为啥是01234,因为let声明变量时候,js引擎在后台为每个迭代循环声明新的迭代变量。每个 setTimeout 引用的是不同的变量实例。

这种每次迭代声明一个独立变量实例的行为适用所有for循环,比如 for-in for-of。

3.4 数据类型

这里我统一整理到这个部分了,请移步 《JS之数据类型》。

4 变量 作用域 内存

4.1 原始值和引用值

4.1 原始值和引用值,类型判断,我放入了《JS之数据类型

函数传参是按值传递的,也就是说函数内部是复制的,这意味着简单值不会发生变化,引用类型还是会产生影响。

4.2 执行上下文和作用域

这里也摘出去了 《JS基础之作用域和闭包

4.3 垃圾回收 GC

js里的垃圾回收是自动的,我觉得也是趋势。
自动垃圾回收:

  • 确定某个变量不会被使用
  • 释放它的内存
  • 每个一段时间自动运行

历史上有两种方式:

  • 标记清理,主流。
  • 引用计数

接触一个值的引用 a=null 不会自动导致内存被回收。关键还是确保值不在上下文,下次gc会回收的。

  • 通过const let也能提升性能。因为都是块为作用域,相比var 会更早让gc介入。let的意义又多了一层

5 基本引用类型

  • Date
  • RegExp
  • 原始值包装类型 String Boolean Number
  • 单例内置对象

我放入了《JS之数据类型

6 集合引用类型

内容:

  • 对象
  • 数组、typed array
  • Map, WeakMap, Set, WeakSet
  • 迭代拓展

归类到《JS之数据类型》,数组这里,我单独摘出去了,参考《JS之数组

7 迭代器和生成器

内容:

  • 迭代、迭代器
  • 生成器

似懂非懂,可能需要跨语言或者有了应用场景才懂。《JS迭代器和生成器

8 对象、类、面向对象

内容:

  • 理解对象、对象创建过程
  • 理解继承
  • 理解类

归类到 JS基础之继承、原型链、面向对象

9 代理和反射

  • 代理模式
  • 代码捕获器、反射方法
  • 代理模式

拦截并向基本操作嵌入额外行为的能力。

代理Proxy和影射Reflex

10 函数

这部分内容真多。

js函数

11 Promise和异步函数

内容包括:

  • 异步编程
  • promise
  • 异步函数

todo 有个视频没看

JS异步编程

12 BOM

意义不大,比较基础,快速略过。

和浏览器有关的js-web-api

13 客户端检测

能力检测,这里忽略。

从实际来看只考虑 useragent 足够了。

还有一些能力检测,这个配合具体事例再看吧。

打印 navigator 就可以拿到。

14 DOM

和浏览器有关的js-web-api

15 DOM拓展

主要是说 document.querySelector 和 document.querySelectorAll 这两个方法。
选择器相关。

scrollIntoView() 可以控制滚动页面,就不用js计算位置了

  • scrollIntoView(alignToTop:boolean, scrollIntoViewOptions)
    • alignToTop 是否滚动后对齐视口顶部否则底部
    • options
      • behavior: smooth|auto,定义过渡动画 ,默认 auto
      • block: start|center|end|nearest 默认 start 垂直方向的对齐
      • inline: start|center|end|nearest 默认nearest 水平方向的对齐

其他没啥内容了。

16 DOM2 和 DOM3

创建DOM范围对象 document.createRange 大致了解即可。

范围是选择DOM结构中特定部分并进行操作的一种方式。

通过范围的选区可以在保持文档结构完好的同时从文档中移除内容,也可复制文档中相应的部分。

17 事件

也单独整理了。

和浏览器有关的js-web-api

18 动画与Canvas图形

Canvas

-1 参考链接