能简单描述一下你对“防抖”和“节流”的认识吗?
防抖类似回城,打断就得重新回。节流类似技能需要冷却时间,到了才能用。 防抖:在限定时间内,总是执行最后一次。节流:在限定时间内,只会执行第一次。
防抖
所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。
代码实现:
代码语言:javascript复制/**
* @description 防抖
* @param fn 需要防抖的函数
* @param delay 毫秒,防抖期限值
*/
function debounce(fn, delay) {
let timer = null; // 借助闭包
return function () {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(fn, delay);
};
}
节流
所谓节流,就是指连续触发事件但是在 n 秒中只执行一次函数。节流会稀释函数的执行频率。
代码实现:
代码语言:javascript复制/**
* @description 节流
* @param fn 需要节流的函数
* @param delay 毫秒,节流期限值
*/
function throttle(fn, delay) {
let valid = true;
return function () {
if (!valid) {
//休息时间 暂不接客return false
}
// 工作时间,执行函数并且在间隔期内把状态位设为无效
valid = false;
setTimeout(() => {
fn();
valid = true;
}, delay);
};
}
由于节流是第一次生效,而防抖是最后一次生效,所以防抖会获取到最新数据。
未经允许不得转载:w3h5 » 前端面试题:"防抖"和"节流"