js必会知识点

  • 函数防抖
const debounce = (fn, time) => {
    let timer = null
    return function (...args) {
        if (timer) clearTimeout(timer)
        timer = setTimeout( () => { fn(...args) }, time)
    }
}
  •  函数节流
const throttle = (fn, time) => {
    let pre = Date.now()
    return function(...args) {
        let now = Date.now()
        if (now-pre >= time {
            fn(...args)
            pre = Date.now()
        }
    }
}
  • EventLoop
  1. 首先执行同步代码,这属于宏任务
  2. 当执行完所有同步代码后,执行栈为空,查询是否有异步代码执行
  3. 执行所有微任务
  4. 当执行完所有微任务后,如有必要会渲染页面
  5. 然后开始下一轮EventLoop,执行宏任务中的异步代码,也就是setTimeout中的回调函数

宏任务包括:script、setTimeout、setInterval、setImmediate、I/O、UI rendering
微任务包括:process.nextTick(node独有)、promise、MutationObserver、

  • js基本算

1. 时间复杂度指的是一个算法执行所耗费的时间

2. 空间复杂度指运行完一个程序所需内存的大小  

const arr = [13, 23, 1, 4, 14, 35, 21, 54]

function bubbleSort(arr) {
  const l = arr.length - 1
  for (let j = 0; j < l; j++ ) {
    // 每次循环结束后最后一个数值最大,减少内层循环次数
    let done = true
    for (let i = 0; i < l - j; i++) {
      if (arr[i] > arr[i + 1]) {
        let temp = arr[i]
        arr[i] = arr[i + 1]
        arr[i + 1] = temp
        done = false
      }
    }
    // 某次循环时 若没有任何两数交换 表示排序完成
    if (done) break
  }
  return arr
}
console.log(bubbleSort(arr))

时间复杂度: 平均时间复杂度O(n*n) 、最好情况O(n)、最差情况O(n*n)
空间复杂度: O(1) 
稳定性:稳定

原文地址:https://www.cnblogs.com/laine001/p/11191838.html