var throttle = function(func, delay) {
var prev = Date.now();
return function() {
var context = this;
var args = arguments;
var now = Date.now();
if (now - prev >= delay) {
func.apply(context, args);
prev = Date.now();
}
}
}
function handle() {
console.log(Math.random());
}
window.addEventListener('scroll', throttle(handle, 1000));
两个date.now()是怎么运行的 原理是什么
先用闭包的方式在注册的时候初始化了一个时间戳作为节流计时的开始,每次节流函数执行的时候判断当前时间和节流开始的时间差如果大于等于预计时间(delay)就把节流开始计时的时间更新一下,以当前时间节点为下一个节流的开始时间。这样就保证了每一段时间执行一次