跳至主要內容
手撕Promise
class MyPromise {

}

const promise1 = new MyPromise((resolve, reject) => {
  setTimeout(() => {
    resolve()
  }, 3000)
})
promise1.then(rs => {

},()=>{}).catch(err => {})

Cap原创小于 1 分钟javascript
二叉树与图

深度遍历

前序遍历

根结点-->左子树-->右子树

中序遍历

左子树-->根结点-->右子树

后续遍历

左子树-->右子树-->根结点

二叉查找树

  • 若任意节点的左子树不为空,则左子树上所有节点的值均小于它的根节点的值
  • 若任意节点的右子树不为空,则右子树上所有节点的值均大于它的根节点的值
  • 任意节点的左、右子树也分别为二叉查找树
  • 没有键值相等的节点

Cap原创小于 1 分钟javascript
Promise

新建一个Promise实例的时候,发生了什么

const chenjian = new Promise(function(resolved, rejected) {
    setTimeout( () => {
      resolved()
    },1000)
  })
chenjian.then(function(){})

Cap原创小于 1 分钟javascript
JS循环小记

循环类型

在ECMA262标准第三版中定义了四种类型的循环

  1. for
  2. while
  3. do...while...
  4. for...in...

for in 循环比其他几种要慢,这是因为每次迭代时都会搜索实例和原型对象

for (const key in object) {
  if (object.hasOwnProperty(key)) {
    const element = object[key];

  }
}

Cap原创大约 1 分钟javascript
选择,冒泡,插入,快速排序
/**
 * 选择排序
 *  [3, 1, 4, 1, 5, 9]
 *  [1, 3, 4, 1, 5, 9]
 *  原理:一个min指针,一次循环找到最小值,和min互换位置,保证最左边是最小值
 */
function selectSort(nums) {
    for (let i = 0; i < nums.length - 1; i++) {
        let min = i
        for (let j = i + 1; j< nums.length; j++) {
            if (nums[j] < nums[min]) {
                min = j   1
            }
        }
        [nums[i], nums[min]] = [nums[min], nums[i]]
    }
    return nums
}

Cap原创大约 2 分钟javascript
Set数据类型相关

类似于数组,但是值都是唯一的。
const a = new Set([1,2,3,3,4])

Set 内部判断两个值是否不同,使用的算法叫做“Same-value-zero equality”

了解下各比较算法

1.比较熟悉的 == 和 ===,前者会在类型不相等时,依据规则进行类型转换。而后者则是不允许类型转化来比较。
2. Object.is() 方法也是比较两者是否相等,它使用的是**SameValue算法。**与 == 和 ===的区别如下

Object.is(NaN, NaN) // true
Object.is(0,-0) // false
Object.is(null, null) // true
NaN === NaN // false
null === null // true
0 === -0 // true

Cap原创大约 1 分钟javascript
内存,事件循化机制

垃圾回收

引用计数

这个算法主要是定义"对象有没有被其他对象引用"为依据,来决定是否回收。
但是如果两个对象之前互相引用,那么就会回收不了

标记清除

这个算法是定义"对象能否被获得"为依据,能否被获得指的是从根元素,也可以理解为全局,去获得被引用的元素,垃圾回收器将定期从根开始,找所有从根开始引用的对象,然后找这些对象引用的对象……从根开始,垃圾回收器将找到所有可以获得的对象和收集所有不能获得的对象。

现在所有浏览器的垃圾回收机制都是基于标记清除的算法来实现优化。

Event Loop


Cap原创大约 5 分钟javascript