- 函数防抖
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
- 首先执行同步代码,这属于宏任务
- 当执行完所有同步代码后,执行栈为空,查询是否有异步代码执行
- 执行所有微任务
- 当执行完所有微任务后,如有必要会渲染页面
- 然后开始下一轮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)
稳定性:稳定