函数的防抖节流是前端对于前端代码性能优化的一个重要组成部分,不管平时撸代码的时候,提升前端代码性能,还是找工作去面试的时候,这是一个必须要掌握的知识点
函数的防抖和节流用常见的举例理解为当我们拖动滚动条时,会一直触发滚动事件,假设设置拖动30S之后停止,delay是1S,因为每一秒都会触发多次这个滚动事件
防抖
就是当30S后我们停止拖动时,会执行一次回调函数
官方一点的解释:所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。
节流
每秒钟我们会触发一次回调函数,一共触发了三十次
官方一点的解释:所谓节流,就是指连续触发事件但是在 n 秒中只执行一次函数
接下来涉及到的就是常见的防抖节流的手写代码问题了
// 非立即执行版本 ps:其实立即执行和非立即执行我还没搞懂,抽空去看看
debounce(fn,delay){
let timer = null
return funtion(){
const that = this
let arg = arguments
clearTimeout(timer)
timer = setTimeout(function(){
fn.apply(that,arg)
},dalay)
}
}
// 节流 时间戳版本
throttle(fn,delay){
let preTime= Date.now()
return function(){
const that = this
let arg = arguments
let nowTime = Date.now()
if(nowTime-preTime >delay){
fn.apply(that,arg)
}
}
}