定义:在事件被触发 delay 毫秒后才执行。如果在该时间内再次触发,则重新计时。
场景:
resize (调整过程中不计算,停止后计算)。核心思想:对于连续的事件,只执行最后一次。
定义:规定在单位时间内(如 1 秒)只能触发一次。如果该时间内被触发多次,只有一次生效。
场景:
scroll 监听(可设置每 100ms 计算一次位置)。核心思想:对于连续的事件,稀释执行频率(每隔多少时间执行一次)。
面试时,不仅需要说出区别,更需要现场手写代码。
这里提供两种方案:时间戳版(立即执行,但在最后一次后不会再执行)和 定时器版(延迟执行,但在最后一次后会补执行)。面试写出简单版即可。
组合版 (推荐):
function 关键字或者箭头函数通过 apply 绑定正确的 this。...args 并通过 apply 传递给原函数。immediate 选项控制首次是否立即触发。.cancel() 方法清除定时器。