面试了许多求职者,很多求职者只知其然,而不知所以然,写此文章为广大前端小伙伴指引迷津。纯干货!纯干货!纯干货!
目录
防抖
什么是防抖?
答:短时间大量触发事件,只会触发一次事件。
防抖的作用?
答:实现减少触发的频率,又不影响用户体验。
防抖的实现原理?
答:借助setTimeout实现,为了不影响全局环境,利用闭包设置一个变量保存计时器。
防抖的使用场景?
答:搜索框的请求优化等。
防抖的缺陷?
答:大量使用会导致内存泄漏。
防抖的笔试题?
// 手写一个防抖函数
function debounce (fn, delay) {
// 利用闭包保存定时器
let timer = null
return function () {
let self = this, arg = arguments
// 在规定时间内再次触发会先清除定时器后再重设定时器
if(timer) clearTimeout(timer)
timer = setTimeout(() => {
fn.apply(self, arg)
}, delay)
}
}
面试大白话
答:首先,防抖是短时间大量触发事件,只会执行一次。其主要目的也是为了减少触发频率,又不影响用户体验。它的原理就是借助setTimeout实现,为了不影响全局环境,利用闭包设置一个变量保存计时器。我们项目里面一般就是搜索框的请求优化等。不过闭包用的太多,会导致内存泄漏。