函数的防抖与节流

函数抖动: 不断触发事件会不断的执行某个方法
函数防抖: 当事件在不断的触发,等待停下来之后 会执行一次
举个栗子: 比如煮饭,整个过程在加热(好比 不断触发事件),只有电饭煲跳了之后(好比 事件触发停下来),就可以吃饭了(执行某个方法)

var timer = null
function  fangdou(await) {
	if (timer) {
	// 只要事件一触发,初回清除上一次的定时器,定时器清除了,
	// 就不会执行定时器里面的代码,也就会中断上一次准备执行的代码
		clear(timer)
	}
	timer = setTimeout(()=>{
		console.log('我滚动了')
	},await)
}

函数节流: 当事件不断触发,不会马上执行,二是到了规定时间后执行就执行一次,说白了就是降低执行频率,当事件触发结束,就不会再执行

举个栗子: 好比口罩生产机器,开启电源后就开始工作(事件不断触发), 假设每10秒生产一个口罩(生产口罩就是 执行某个方法),当电源关闭后就不再 生产口罩

function fn() {
	console.log('我滚动了')
}

function jieliu(delay,fn) {
	var beginTime = Date.now()
	console.log('我在开始会执行一次,在滚动中不会被触发',beginTime)
	return function() {
		var currentTime = Data.now
		if (currentTime- beginTime > delay) {
			fn()
            // 重置 beginTime
            beginTime = Date.now()
		}
	}
}

window.onscroll = jieliu(1000, fn) // 执行的是 return 后的函数,而不是jieliu函数,
								   // 因为 window.onscroll  =  函数名 或 匿名函数
								   // 值得注意的是 beginTime 一直还在内存中

函数防抖与函数节流的区别: 函数防抖只有在事件 触发停下来之后会触发,整个过程只触发一次。
函数节流,说白了就是事件 触发过程中(如:滚动中)降低方法的执行频率,在规定时间范围内会触发一次,在整个过程中(指的是到事件触发结束 可能会触发多次,触发结束后不再执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值