Skip to content

Latest commit

 

History

History
62 lines (47 loc) · 3.86 KB

you-dont-know-js.md

File metadata and controls

62 lines (47 loc) · 3.86 KB

I.你不知道的javascript

原书在线地址:《你不知道的javascript》

作用域和闭包:

1.4:

作用域是一套规则,用于确定在何处以及如何查找变量(标识符)。如果查找的目的是对变量进行赋值,那么就会使用 LHS 查询;如果目的是获取变量的值,就会使用 RHS 查询。

4.4:

我们习惯将var a = 2;看作一个声明,而实际上JavaScript引擎并不这么认为。它将var a和 a = 2 当作两个单独的声明,第一个是编译阶段的任务,而第二个则是执行阶段的任务。

5.6:

当函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域之外执行,这时就产生了闭包。

this和对象原型

1.4:

this 实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用。

2.6:

如果要判断一个运行中函数的 this 绑定,就需要找到这个函数的直接调用位置。找到之后就可以顺序应用下面这四条规则来判断 this 的绑定对象。

  1. 由new调用?绑定到新创建的对象。
  2. 由call或者apply(或者bind)调用?绑定到指定的对象。
  3. 由上下文对象调用?绑定到那个上下文对象。
  4. 默认:在严格模式下绑定到undefined,否则绑定到全局对象。

5.5:

如果要访问对象中并不存在的一个属性,[[Get]] 操作(参见第 3 章)就会查找对象内部[[Prototype]] 关联的对象。这个关联关系实际上定义了一条“原型链”(有点像嵌套的作用域链),在查找属性时会对它进行遍历。

附录A.2:

你可能会认为 ES6 的 class 语法是向 JavaScript 中引入了一种新的“类”机制,其实不是这样。class 基本上只是现有 Prototype(委托!)机制的一种语法糖。

类型和语法

1.2:

JavaScript 有七种内置类型: • 空值(null) • 未定义(undefined) • 布尔值(boolean) • 数字(number) • 字符串(string) • 对象(object) • 符号(symbol,ES6 中新增) 除对象之外,其他统称为“基本类型”。

1.4:

变量没有类型,但它们持有的值有类型。类型定义了值的行为特征。

2.6:

简单标量基本类型值(字符串和数字等)通过值复制来赋值/ 传递,而复合值(对象等)通过引用复制来赋值 / 传递。JavaScript 中的引用和其他语言中的引用 / 指针不同,它们不能指向别的变量 / 引用,只能指向值。

3.5:

对于简单标量基本类型值,比如 "abc",如果要访问它的 length 属性或 String.prototype 方法,JavaScript 引擎会自动对该值进行封装(即用相应类型的封装对象来包装它)来实现对这些属性和方法的访问。

异步和性能

1.7:

实际上,JavaScript 程序总是至少分为两个块:第一块现在运行;下一块将来运行,以响应某个事件。尽管程序是一块一块执行的,但是所有这些块共享对程序作用域和状态的访问,所以对状态的修改都是在之前累积的修改之上进行的。 一旦有事件需要运行,事件循环就会运行,直到队列清空。事件循环的每一轮称为一个 tick。用户交互、IO 和定时器会向事件队列中加入事件。

3.7:

每个 Promise 实例(不是 Promise API 命名空间)都有 then(..) 和 catch(..) 方法,通过 这两个方法可以为这个 Promise 注册完成和拒绝处理函数。Promise 决议之后,立即会调用 这两个处理函数之一,但不会两个都调用,而且总是异步调用

读书笔记

《你不知道的javascript》对js的一些规范、行为、常见名词等有深入且易懂的讲解。对于开发人员来说,不论是否遇见书中的场景,都能得到对js更好的认识和巩固。