Salesforce OA 面试真题解析:JavaScript 中实现 Debounce(防抖)
实现 JavaScript 的 debounce:返回一个新函数,延迟 delay 毫秒后才执行,期间再次调用则重置计时器。用闭包保存定时器并每次清除重置。
题目描述
实现 debounce(fn, delay),返回一个新函数。新函数被调用时不立即执行,而是延迟 delay 毫秒;如果在延迟期间再次被调用,则重新计时,只有最后一次调用在安静期结束后才真正执行。
解题思路
用闭包保存 timer。每次调用先清除已有 timer,再设置一个新的 setTimeout,延迟执行原函数。可选支持立即执行与取消。核心是「重复调用重置计时」。
function debounce(fn, delay) {
let timer = null;
return function (...args) {
clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(this, args);
}, delay);
};
}
复杂度与易错点
时间、空间均为 O(1)(一个计时器)。this 与参数要在 setTimeout 回调里正确透传,否则原函数拿不到调用上下文;连续触发时 clearTimeout 必须先于新 setTimeout。
FAQ
为什么要 clearTimeout 而不是只覆盖 timer?
直接覆盖会让旧的计时器仍然触发,导致延迟期间内多次执行。clearTimeout 先取消上一次定时,才能保证只有最后一次调用生效。
参考来源
联系 VOPathway
如果你希望把这套方法用于自己的 OA 或 VO 准备,可以把目标岗位、当前阶段、面试时间和主要难点发给 VOPathway,我们会据此安排针对性的练习与复盘。
- 微信:Coding0201
- 邮箱:[email protected]
- Telegram:@OAVOProxy
- WhatsApp:+86 178 6396 8105
可提供 OA辅助、OA辅导、VO辅助与 VO辅导。文章用于训练参考,不代表相关公司的官方流程;实际安排请以候选人收到的通知为准。
本文用于面试准备与训练复盘。公司名称仅用于标识题型素材主题,不代表官方合作或录用承诺。
预约一次训练复盘 ↗