1.防抖函数
function fangdou(fn, time) {
let timeout = null
return function () {
if (timeout!== null) {
clearTimeout(timeout)
}
timeout = setTimeout(fn, time)
}
}
2.节流函数
function jieliu(fn, time) {
let isWork = false //是否开始工作
return function () {
if (isWork) {
return false
}
isWork = true
setTimeout(() => {
fn()
isWork = false
}, time)
}
}
3.使用
-
一开始我是这样用的,但是是错误的
-
-
因为防抖函数,返回的是一个回调函数,return了一个function,所以频繁点击,其实是频繁返回了一个回调 函数,然后多次执行了这个函数,就会出现点击了多少次,就打印了多少次的结果,比如我点击了6次,期望结果是只执行最后的一次,结果执行了6次
-
-
正确的用法是
-
-
咱们不能频繁返回函数,而是频繁调用这个返回函数,提前将这个返回函数存起来,然后频繁调用这个返回函数,节流同理
4.防抖和节流中怎么传参
-
先了解一下定时器怎么传参数
回调函数的参数可以通过定时器的后面的参数直接传递,多个参数用“,”拼接。 setTimeout(setTime, 1000, 12, '路西') // setTimeout(setTime, 1000, '参数1', '参数2’, ...) function setTime(num, name) { console.log('定时器执行并且接收参数:', num, name) } -
因为防抖和节流是返回了一个函数,所以如果我们要传参,是在这里面传参