防抖与节流

132 阅读1分钟

防抖

触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间

function unshake(fn){
	let timer = null
	return function (){
		clearTimeout(timer);
		timer = setTimeout(()=>{
			fn.apply(this,arguments);
			clearTimeout(timer)
		},500)
	}
}

节流

高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率

function throttle(fn){
    let canRun = true;
    return function(){
    	if(!canRun) return;
    	canRun = false;
    	setTimeout(()=>{
    		fn.apply(this,arguments);
    		canRun = true;
    	},500)
    }
}