Hello 算法 1.1.0 TypeScript版
如果感觉以下内容理解困难,可以在读完“栈”章节后再来复习。 那么,迭代和递归具有什么内在联系呢?以上述递归函数为例,求和操作在递归的“归”阶段进行。这意味 着最初被调用的函数实际上是最后完成其求和操作的,这种工作机制与栈的“先入后出”原则异曲同工。 事实上,“调用栈”和“栈帧空间”这类递归术语已经暗示了递归与栈之间的密切关系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 。有了这些地址,程序便可以访问内存中的数据。 图 3‑2 内存条、内存空间、内存地址 Tip 值得说明的是,将内存比作 Excel 表格是一个简化的类比,实际内存的工作机制比较复杂,涉及地址 空间、内存管理、缓存机制、虚拟内存和物理内存等概念。 内存是所有程序的共享资源,当某块内存被某个程序占用时,则无法被其他程序同时使用了。因此在数据结 构与算法的设计中,内存资源是一个重要的考虑因素 选择 10 作为初始容量。 ‧ 数量记录:声明一个变量 size ,用于记录列表当前元素数量,并随着元素插入和删除实时更新。根据 此变量,我们可以定位列表尾部,以及判断是否需要扩容。 ‧ 扩容机制:若插入元素时列表容量已满,则需要进行扩容。先根据扩容倍数创建一个更大的数组,再将 当前数组的所有元素依次移动至新数组。在本示例中,我们规定每次将数组扩容至之前的 2 倍。 // === File:0 码力 | 383 页 | 18.49 MB | 1 年前3Hello 算法 1.2.0 简体中文 TypeScript 版
如果感觉以下内容理解困难,可以在读完“栈”章节后再来复习。 那么,迭代和递归具有什么内在联系呢?以上述递归函数为例,求和操作在递归的“归”阶段进行。这意味 着最初被调用的函数实际上是最后完成其求和操作的,这种工作机制与栈的“先入后出”原则异曲同工。 事实上,“调用栈”和“栈帧空间”这类递归术语已经暗示了递归与栈之间的密切关系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 。有了这些地址,程序便可以访问内存中的数据。 图 3‑2 内存条、内存空间、内存地址 Tip 值得说明的是,将内存比作 Excel 表格是一个简化的类比,实际内存的工作机制比较复杂,涉及地址 空间、内存管理、缓存机制、虚拟内存和物理内存等概念。 内存是所有程序的共享资源,当某块内存被某个程序占用时,则通常无法被其他程序同时使用了。因此在数 据结构与算法的设计中,内存资源是一个重要的考虑 选择 10 作为初始容量。 ‧ 数量记录:声明一个变量 size ,用于记录列表当前元素数量,并随着元素插入和删除实时更新。根据 此变量,我们可以定位列表尾部,以及判断是否需要扩容。 ‧ 扩容机制:若插入元素时列表容量已满,则需要进行扩容。先根据扩容倍数创建一个更大的数组,再将 当前数组的所有元素依次移动至新数组。在本示例中,我们规定每次将数组扩容至之前的 2 倍。 // === File:0 码力 | 383 页 | 18.49 MB | 10 月前3Hello 算法 1.0.0b1 TypeScript 版
10 作为初始容量。 ‧ 数量记录:需要声明一个变量 size ,用来记录列表当前有多少个元素,并随着元素插入与删除实时更 新。根据此变量,可以定位列表的尾部,以及判断是否需要扩容。 ‧ 扩容机制:插入元素有可能导致超出列表容量,此时需要扩容列表,方法是建立一个更大的数组来替换 当前数组。需要给定一个扩容倍数 extendRatio ,在本示例中,我们规定每次将数组扩容至之前的 2 倍。 number): void { if (index < 0 || index >= this._size) throw new Error('索引越界'); // 元素数量超出容量时,触发扩容机制 if (this._size === this._capacity) { this.extendCapacity(); } // 将索引 index 以及之后的元素都向后移动一位 for size = stack.length; /* 判断是否为空 */ const is_empty = stack.length === 0; 5.1.2. 栈的实现 为了更加清晰地了解栈的运行机制,接下来我们来自己动手实现一个栈类。 栈规定元素是先入后出的,因此我们只能在栈顶添加或删除元素。然而,数组或链表都可以在任意位置添加删 除元素,因此 栈可被看作是一种受约束的数组或链表。换言之,我们可以“屏蔽”数组或链表的部分无关操0 码力 | 186 页 | 14.71 MB | 1 年前3TypeScript 4.0 使用手册
x + y; }; 在JavaScript里,函数可以使用函数体外部的变量。 当函数这么做时,我们说它‘捕获’了这些变 量。 至于为什么可以这样做以及其中的利弊超出了本文的范围,但是深刻理解这个机制对学习 JavaScript和TypeScript会很有帮助。 1. let z = 100; 2. 3. function addToZ(x, y) { 4. return x buildName; 学习如何在JavaScript里正确使用 this 就好比一场成年礼。 由于TypeScript是JavaScript 的超集,TypeScript程序员也需要弄清 this 工作机制并且当有bug的时候能够找出错误所在。 幸 运的是,TypeScript能通知你错误地使用了 this 的地方。 如果你想了解JavaScript里 的 this 是如何工作的,那么首先阅读Yehuda 值,以及 enum 和对应数字值之间的来回赋值。 高级主题 子类型与赋值 类型兼容性 - 166 - 本文档使用 书栈网 · BookStack.CN 构建 语言里的不同地方分别使用了它们之中的机制。 实际上,类型兼容性是由赋值兼容性来控制的,即使 在 implements 和 extends 语句也不例外。 更多信息,请参阅TypeScript语言规范. 类型兼容性 - 167 -0 码力 | 683 页 | 6.27 MB | 1 年前3TypeScript Handbook(中文版)
这样做有很多原因,总 体上来说这不会有什么大问题直到我们发现它应用在 Promise 和 Observable 上 时有些副作用。 TypeScript 2.4在处理两个回调类型时引入了收紧机制。例如: interface Mappable{ map(f: (x: T) => U): Mappable; } declare let a: Mappable ; + y; }; 在JavaScript里,函数可以使用函数体外部的变量。 当函数这么做时,我们说它‘捕 获’了这些变量。 至于为什么可以这样做以及其中的利弊超出了本文的范围,但是 深刻理解这个机制对学习JavaScript和TypeScript会很有帮助。 let z = 100; function addToZ(x, y) { return x + y + z; } 函数类型 buildName; this 学习使用JavaScript里 this 就好比一场成年礼。 由于TypeScript是JavaScript的 超集,TypeScript程序员也需要弄清 this 工作机制并且当有bug的时候能够找出 错误所在。 幸运的是,TypeScript能通知你错误地使用了 this 的地方。 如果你 想了解JavaScript里的 this 是如何工作的,那么首先阅读Yehuda 0 码力 | 557 页 | 7.48 MB | 1 年前3Hello 算法 1.0.0b5 TypeScript 版
们选择 10 作为初始容量。 ‧ 数量记录:声明一个变量 size,用于记录列表当前元素数量,并随着元素插入和删除实时更新。根据此 变量,我们可以定位列表尾部,以及判断是否需要扩容。 ‧ 扩容机制:若插入元素时列表容量已满,则需要进行扩容。首先根据扩容倍数创建一个更大的数组,再 将当前数组的所有元素依次移动至新数组。在本示例中,我们规定每次将数组扩容至之前的 2 倍。 // === File: num: number): void { if (index < 0 || index >= this._size) throw new Error('索引越界'); // 元素数量超出容量时,触发扩容机制 if (this._size === this._capacity) { this.extendCapacity(); } // 将索引 index 以及之后的元素都向后移动一位 for const size = stack.length; /* 判断是否为空 */ const is_empty = stack.length === 0; 5.1.2 栈的实现 为了深入了解栈的运行机制,我们来尝试自己实现一个栈类。 栈遵循先入后出的原则,因此我们只能在栈顶添加或删除元素。然而,数组和链表都可以在任意位置添加和 删除元素,因此栈可以被视为一种受限制的数组或链表。换句话说,我们可以“屏蔽”数组或链表的部分无0 码力 | 378 页 | 30.70 MB | 1 年前3TypeScript 多场景设计方案及应用实践
场景,⽽而淘宝有不不少全栈场景 js/ts ⽬目录混合 TS 体验不不同 Egg 解决的是 BFF 场景,⽽而淘宝有不不少全栈场景 class ⽤用法,⽆无法多继承 TS 杂糅的 app/ctx 合并机制 体验不不同 Egg 解决的是 BFF 场景,⽽而淘宝有不不少全栈场景 TS 第⼀一代设计 第⼀一代设计 TS 解决复杂度问题 尝试引⼊入 IoC 解决复杂业务的问题 TS 配置 很早就开始使⽤用0 码力 | 95 页 | 8.28 MB | 1 年前3
共 7 条
- 1