防抖和节流的实现

防抖和节流是前端开发中用于优化性能的常用技术,主要目的是限制函数执行的频次。防抖在用户连续操作后仅执行最后一次,如防止重复提交或输入查询。节流则是在一定时间间隔内执行一次,适用于滚动监听等场景,以降低CPU资源消耗。本文介绍了这两种技术的定义、应用场景及如何引用预定义函数。
摘要由CSDN通过智能技术生成

什么是防抖和节流

防抖:则是对连续触发的事件,只会执行一次,不管事件触发多少次,都只执行一次。(在防抖里设置的时间可以说是对连续触发时间的定义,在设置时间内运行的事件就被称为连续触发的事件)
节流:是指对于连续触发的事件,每隔一段固定时间执行一次,只要事件持续出发就可以执行很多次。(在节流里涉及的时间主要是指事件执行的间隔时间)

防抖函数:

// 防抖:最后一个人说了算。防抖的中心思想在于:我会等你到底。在某段时间内,不管你触发了多少次回调,我都只认最后一次。
// fn是我们需要包装的事件回调, delay是每次推迟执行的等待时间
export function debounce(fn, delay = 200) {
	// 定时器
	let timer;
	// 将debounce处理结果当作函数返回
	return function () {
		let th = this;
		let args = arguments;
		// 每次事件被触发时,都去清除之前的旧定时器
		if (timer) {
			clear
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JS中的防抖函数和节流函数是常用的函数优化方法,可以有效控制函数的执行频率和执行时间间隔。 防抖函数的实现可以使用闭包和定时器来实现。通过在函数执行前先清除之前的定时器,然后设置一个新的定时器来延迟函数的执行。如果在指定的时间内再次触发函数,则清除之前的定时器重新设置新的定时器,以此来达到延迟函数执行的效果。下面是一个防抖函数的示例代码: ```javascript function debounce(fn, delay) { var timer = null; return function () { if (timer) clearTimeout(timer); timer = setTimeout(function () { fn(); }, delay); } } ``` 节流函数的实现可以使用定时器和时间戳来实现。在函数的执行过程中,通过判断当前的时间戳与上次执行的时间戳的差值来控制函数的执行频率。如果距离上次执行的时间超过指定的时间间隔,则执行函数,并更新上次执行的时间戳。下面是一个节流函数的示例代码: ```javascript function throttle(fn, delay) { var lastTime = 0; return function () { var currentTime = Date.now(); if (currentTime - lastTime >= delay) { fn(); lastTime = currentTime; } } } ``` 防抖函数适用于在连续触发事件时,只在最后一次触发事件后执行一次函数,常用于输入框的输入事件等场景。节流函数适用于在连续触发事件时,按照指定的时间间隔执行函数,常用于滚动事件、窗口大小改变事件等场景。 以上是防抖函数和节流函数的简单实现和应用场景的介绍,希望对您有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [JavaScript 防抖节流实现](https://blog.csdn.net/weixin_43853746/article/details/122654312)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [JS函数节流防抖之间的区分和实现详解](https://download.csdn.net/download/weixin_38622962/12947757)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值