欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【前端面试】防抖和节流

程序员文章站 2022-06-09 21:46:06
...

防抖

含义:规定时间内发生抖动时不执行后续操作。

const button = document.querySelector('.input');

function payMoney() {
    console.log('已剁');
    console.log('this ==> ', this);
}

function debounce(func, delay) {
    let timer;
    return function () {
        let context = this; // 解决防抖this指向
        let args = arguments; // 解决传参问题
        clearTimeout(timer);
        timer = setTimeout(() => {
            // func.call(context);
            func.apply(context, args);
        }, delay);
    };
}

button.addEventListener('click', debounce(payMoney, 1000));
// button.addEventListener('click', payMoney);

节流

含义:规定时间间隔内后续动作只会执行一次。

function coloring() {
	let r = Math.floor(Math.random() * 255);
	let g = Math.floor(Math.random() * 255);
	let b = Math.floor(Math.random() * 255);
	document.body.style.background = `rgb(${r},${g},${b})`;
}

function throttle(func, delay) {
	let timer;
	return function () {
		let context = this;
		let args = arguments;
		if (timer) {
			return;
		}
		timer = setTimeout(() => {
			func.apply(context, args);
			timer = null;
		}, delay);
	};
}

window.addEventListener('resize', throttle(coloring, 2000));
相关标签: javascript