书籍《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 事件
也单独整理了。