直接上代码,逻辑十分清晰
防抖函数
<body>
<script>
const fn = (a, b) => {
console.log('滚动啦!');
console.log(a, b)
}
const debounce = (fn, wait) => {
let timer = null;
return (...args) => {
if (timer) { clearTimeout(timer) }
timer = setTimeout(() => {
fn.apply(this, args)
}, wait);
}
}
const debouncedFn = debounce(fn, 1000);
window.addEventListener('scroll', (event) => {
debouncedFn('cqupt', 'computer science');
});
</script>
</body>
节流函数
<body>
<button onclick="handleClick()">click</button>
<script>
const throttle = function (fn, gap = 500) {
let now, pre, timer;
return function () {
if (timer) {
clearTimeout(timer)
timer = null;
}
now = Date.now().toString();
if (typeof pre === 'undefined' || now - pre > gap) {
fn.apply(this, arguments);
pre = now
} else if (timer == null) {
timer = setTimeout(() => {
fn.apply(this, arguments)
timer = null;
}, gap);
}
}
}
function myFn(name, age) {
console.log(name, age);
}
const throttledMyFn = throttle(myFn, 1000);
function handleClick(event) {
throttledMyFn('arthur', 24);
}
</script>
</body>