//利用date对象 function throttle (func,delay) { let pre = 0 return function () { let now = new Date() let _this = this let args = arguments if(now -pre >delay){ func.apply(_this,args) pre = now } } } //利用setTimeout function throttle (func,delay) { let timer; return function (){ let _this = this let args = arguments timer = setTimeout(() => { func.apply(_this,args) timer = null },delay) } } function debounce(fn,delay,immediate = false) { let timer = null let isInvoke = false const _debounce = function(...args) { if(timer) clearTimeout(timer) if(immediate && !isInvoke) { fn.apply(this,..args) isInvoke = true }else { timer = setTimeout(() =>{ fn.apply(this,args) isInvoke = false },delay) } } return _debounce }