js 防抖节流
// 第一版
// 缺点:函数的 this 指向了 window,应该指向 container
function debounce1(fn, wait) {
let timer;
return function () {
clearTimeout(timer);
timer = setTimeout(fn, wait);
}
}
// 第二版(解决this指向问题)
// 缺点:函数的事件对象 event 变成了 undefined
function debounce2(fn, wait) {
let timer;
return function () {
clearTimeout(timer);
// console.log(this); // 这里的 this 是对的
timer = setTimeout(() => {
fn.call(this) //绑定上面的 this
}, wait);
}
}
// 第三版(解决 event 事件对象问题)
function debounce(fn, wait) {
let timer;
return function () {
clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(this, arguments) // 把参数传进去
}, wait);
}
}
// 第四版(立即执行,停止触发 n 秒后,才可以重新触发执行。反过来)
function debounce4(fn, wait, immediate) {
let timer;
return function () {
if (timer) clearTimeout(timer);
if (immediate) {
// 如果已经执行过,不再执行
var callNow = !timer;
timer = setTimeout(() => {
timer = null;
}, wait)
if (callNow) {
fn.apply(this, arguments)
}
} else {
timer = setTimeout(() => {
fn.apply(this, arguments)
}, wait);
}
}
}
// 在 vue 中使用(注意:不能使用箭头函数,否则this指向不对)
// move: debounce(function () {
// console.log(this.title);
// }, 1000)
参考链接:https://blog.csdn.net/time_____/article/details/114326156
A little hug, little gift.
All of little something.
these are our meories.
标签:
javascript
, js
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现