| 书籍《JavaScript高级程序设计》[x] 书籍 [ ] 讲座 [ ] 视频 | |||
|---|---|---|---|
| 作者 | Matt Frisbie 李松峰 译 | 出版社 | 人民邮电出版社 | 
| ISBN | 9787115545381 | 出版时间 | 2019-5 | 
| 豆瓣网址 | 豆瓣 | 是否有电子版 | 图灵、微信读书 | 
| 阅读日期 | 2021-01-09 | 更新日期 | |
| 相关链接 | 教学视频 | 备注 | 
支持正版。
这本书也叫红宝书,因为封皮是红色的。也叫高程,高程四。很多内容相较于第三版做了改动,删除过时内容,增加 es2019的内容。
以下是阅读期间的随手笔记,期望很多内容可以单独整理成篇。
全书目录结构

全书量特别大,很多内容显然可以单独整理成篇。
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:
for(let i=0;i<5;++i){setTimeout(()=>{log(i)},0)}
这里 为啥是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 代理和反射
- 代理模式
 - 代码捕获器、反射方法
 - 代理模式
 
拦截并向基本操作嵌入额外行为的能力。
10 函数
这部分内容真多。
11 Promise和异步函数
内容包括:
- 异步编程
 - promise
 - 异步函数
 
todo 有个视频没看
12 BOM
意义不大,比较基础,快速略过。
13 客户端检测
能力检测,这里忽略。
从实际来看只考虑 useragent 足够了。
还有一些能力检测,这个配合具体事例再看吧。
14 DOM
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 事件
也单独整理了。
