排序算法总结
冒泡排序
冒泡排序重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越小/大的元素会经由交换慢慢“浮”到数列的顶端。
冒泡排序的思路
从头开始比较每一对相邻元素,如果不符合升序/降序的要求,就交换它们的位置
经历过几轮比较,第几大/小的元素一定在倒数第几个
忽略已经找到的元素,重复执行比较交换,直到全部元素有序
图示
实现
12345678910function bubbleSort<T>(arr: T[], comparator: Comparator = defaultComparator) { const len = arr.length; for (let i = 0; i < len - 1; i++) { for (let j = 0; j < len - 1 - i; j++) { if (comparator(arr[j], arr[j + 1]) > ...
Node事件循环
Node 事件循环
当 Node.js 启动后,它会初始化事件循环,处理已提供的输入脚本,它可能会调用一些异步的 API、调度定时器,或者调用 process.nextTick(),然后开始处理事件循环。
事件循环分为六个阶段,每个阶段都有一个 FIFO 队列来执行回调。
通常情况下,当事件循环进入给定的阶段时,将执行该阶段队列中的回调,直到队列用尽或最大回调数已执行。当该队列已用尽或达到回调限制,事件循环将移动到下一阶段。
阶段概述
timers:本阶段执行已经被 setTimeout() 和 setInterval() 的调度回调函数。
pending:系统级回调
idle, prepare:仅系统内部使用
poll:执行与 I/O 相关的回调(除了关闭的回调函数,那些由计时器和 setImmediate() 调度的之外的几乎所有回调)
check:setImmediate() 回调函数在这里执行。
close:一些关闭的回调函数,如:socket.on('close', ...)。
在每次运行的事件循环之间,Node.js 检查它是否在等待任何异步 I/O 或计时器,如 ...
JavaScript中的继承
原型
JavaScript 是基于对象的,函数也是一个对象。JavaScript 中的每一个函数/类都有一个 prototype 属性,它定义了构造函数制造出的对象的公共祖先。在它上面定义的属性和方法可以被对象实例共享。
默认情况下,所有原型对象自动获得一个名为 constructor 的属性,指回与之关联的构造函数。
12function Test { }console.log(Test.prototype.constructor === Test); // true
每个对象都有一个内部属性 [[Prototype]],也被称为隐式原型。 该属性指向构造函数的原型。js 中没有访问 [[Prototype]] 的标准方式,但 Firefox、Safari 和 Chrome 会在每个对象上暴露 __proto__ 属性。
默认通过对象字面量创建的对象隐式原型指向 Object.prototype,相当于通过 new Object() 创建。
在 Chrome 控制台,一个对象的隐式原型的 constructor 为什么函数/类,这个对象就会显示为什么类型。
...
JavaScript执行上下文
执行上下文
当控制权转移到ECMAScript可执行代码时,控制权正在进入执行上下文。活动执行上下文在逻辑上形成一个堆栈。此逻辑堆栈顶部的执行上下文是运行中的执行上下文。
执行上下文(execution context) 指的就是一段代码运行的环境。
调用栈由执行上下文组成,所以在JavaScript中执行上下文就是所谓的栈帧,调用栈的顶部是正在运行的代码的执行上下文,底部是全局的执行上下文。
变量对象
可执行代码类型:
全局代码
eval 代码
函数代码
根据 ES3 文档,执行上下文中的内容包括:
variable object
scope chain
this
全局对象
也就是 globalThis,在浏览器端就是 window,node 就是 global,全局对象包含了 ECMAScript 的内置对象,和宿主环境定义的附加属性。
全局对象在进入任何执行上下文之前被创建,全局对象也是全局的 VO,即所谓的 GO。
变量对象
当进入一个函数的执行上下文时,会创建一个变量对象并和该执行上下文相关联,并使用一个名为 arguments 的属性初始化该对象。
变量对象 ...
Promise/A+规范以及简单实现
Promise A+ 规范
术语
Promise:promise 是一个拥有 then 方法的对象或函数,其行为符合本规范;
thenable:是一个定义了 then 方法的对象或函数,文中译作“拥有 then 方法”;
value:指任何 JavaScript 的合法值(包括 undefined , thenable 和 promise);
exception:是使用 throw 语句抛出的一个值。
reason:表示一个 promise 的拒绝原因。
要求
Promise 的状态
一个 Promise 的当前状态必须为以下三种状态中的一种:Pending、Fulfilled和Rejected。
等待态(Pending)
处于等待态时,promise 需满足以下条件:
可以迁移至执行态或拒绝态
执行态(Fulfilled)
处于执行态时,promise 需满足以下条件:
不能迁移至其他任何状态
必须拥有一个不可变的终值
拒绝态(Rejected)
处于拒绝态时,promise 需满足以下条件:
不能迁移至其他任何状态
必须拥有一个不可变 ...









