JavaScript中函数的防抖和节流

函数防抖:一个函数频繁触发,在规定时间内,只让最后一次函数执行有效(有延迟)

PS:实际使用中还是需要注意this指向

1、非立即执行版(例如点击之后不会立马执行,第一次执行会在delay秒后执行)

function debounce(fn,delay){
	let timer=null;
	return function(...args){
		clearTimeout(timer)
		timer=setTimeout(fn.bind(this,...args),delay) // 定时器回调函数this指向外部this
	}
}

2、立即执行版(例如点击会立马执行,下一次就会在delay秒后执行)

// 立即执行版
function debonce(fn, delay) {
    let timer = null;
    return function (...args) {
   	 	if (timer) clearTimeout(timer)
    	let flag = !timer;
    	timer = setTimeout(() => {
        	 timer = null;
   		}, delay);
    	if (flag) fn.call(this, ...args)
    }
}

For example

let handleClick = debonce(function () {
       console.log('1', this);
    }, 1000)
document.addEventListener('click', handleClick)

函数节流:一个函数频繁触发,在规定时间内,只让第一次函数执行有效

function throttle(fn,delay){
	let start=0;
	return (...args)=>{
		let now=new Date();
		if(now-start>=delay){
			fn.call(this,...args);
			start=now;
		}
	}
}

我在vue项目中对按钮使用过函数防抖,this指向让人头疼,大家在项目中使用的时候多调试一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值