Skip to content

《JavaScript专家编程》(Expert JavaScript)

第一章 对象和原型
new运算符是一种JavaScript试图让自己类似于Java的退化结构。很多人都会对new运算符感到很疑惑,因为它强加了一种伪类动词到JavaScript中,但JavaScript并不是一种正规的基于类继承方法的语言。
ECMAScript 5 引入的Object.create方法。
Object.create()和字面量对象应该替换new Object()这种方法。
面向对象
抽象:把真实世界的对象或过程转化为可计算的模型。
封装:隐藏实现、提升模块化以及保护对象内部的状态。
多态:在特定上下文,对象表现不同。
继承:定义对象间语义化的层级。

当对象检视属性时,它会查询原型链的每一环,直到返回所需的值或者undefined。
当一个原型链的对象设置一个原型链上已经存在的属性时,原型的属性不会改变;取而代之的是,属性会被定义到但前对象上,不能访问远端的原型链。
第二章 函数
函数有两种形式:函数声明和函数表达式。语法解析时,JavaScript会把所有函数声明移到当前作用域的顶端,忽略赋值表达式。
这就是function foo(){}和var bar = function foo(){}产生不同表现的原因。第二个foo()是赋值变量的一部分,拥有自己的作用域。
在JavaScript中,for循环中的x可以被访问到,控制流语句是封闭作用域的一部分。对很多习惯了块级作用域的开发者来说这很不符合直觉。
IIFE有很多方式来写
;!fuction(){}()
运用一个一元表达式,分号是为了防御式编程,防止其他模块没有以分号结尾。
JavaScript是函数级作用域,这跟许多采用块级作用域的语言有所不同。
函数的参数对象仅仅像一个数组。
第三章 闭包
闭包就是将所有自由变量和函数绑定在一个封闭的表达式中,这个表达式可以保留在自由变量和函数创建之外的词法作用域。
闭包的最基本形式就是在一个函数内部返回另一个函数,这样就产生了一个在需要的时候返回封闭作用域的机制。
第四章 术语和俚语
编程术语是通过使用语言的高度特异性的技术规则而形成的代码压缩。像其他形式的术语一样,这种编程的形式用于在社区的成员之间高效地表达复杂的想法。
强转:
转换为String。首先调用toString()。如果不返回基础类型的值,调用valueOf()。如果也不反悔基础类型的值,抛出TypeError异常。
转换为数字。一元运算符的职责是将运算符后的操作数转换为数字。先调用valueOf(), 后调用toString()
第五章 异步生活
JavaScript的单线程意味着每个运行时进程只有一个事件循环。JavaScript的事件循环主要受到两个概念的影响,运行至完成(run-to-completion)和非阻塞输入/输出(I/O).
堆(Heap)。堆是内存中顺序无关的容器。堆是JavaScript存放正在使用或者未被垃圾回收清理的变量和对象的地方。
桢(Frame)。桢是事件循环周期中需要被执行的连续工作单元。桢包含把函数对象和堆中的变量连接在一起的执行上下文。
栈(Stack)。事件循环栈包含了执行一个消息所需的所有连续的桢。事件循环自顶向下处理桢。桢根据彼此的依赖关系链被添加到栈中。有依赖的桢把它们所依赖的桢添加到上面。这个过程确保了依赖关系在被代码引用前得到满足。
队列(Queue)。队列是等待处理的消息的列表。每个消息都引用一个JavaScript函数。当栈为空时,队列中最旧的消息作为底部桢被添加到栈中。
JavaScript是单线程的语言,这意味着并发往往是由其他方式伪装的。JavaScript的事件循环被设计成非阻塞的I/O操作。JavaScript中的回调是把一个函数对象作为参数传递给另一个函数,并在返回值中使用的行为。
第六章 JavaScript的IRL
第七章 风格
第八章 工作流
第九章 代码质量
第十章 提高可测试性

Published inReading

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注