Js防抖函数
1.使用场景:
是在写keyup事件的时候,每次触发,都会请求后台接口,为了避免,每次请求,键盘弹起之后,隔上一段时间再去请求,所以用防抖函数
2.概念:
(1)什么是防抖:多次事件触发后、事件处理函数只执行一次,并且是在触发操作结束时执行。
(2)原理:延时操作处理函数、若设定的延时到来之前、再次触发函数、则清除上一次的延时操作定时器、重新定时
3.使用:
原先代码这样写的:
$("#key").on("keyup",keyupfn());
function keyupfn(){
var timer=null;
return function (){
clearTimeout(timer);
timer=setTimeout(function(){
var Val=$("#key").val();
$.ajax({
type: "post",
url: "",
data: {name:Val},
dataType: "json",
success: function(res) {
// 请求成功
}
});
},800);
}
}使用封装后的:
注:第一个this,只是在刚开始,keyup事件,监听的时候,被调用了,之后,每次触发keyup事件,都是调用的debounce函数return出来的函数
关于this的指向:①谁调用函数,this就指向谁;②debounce这个外层函数与里面return出来的函数的调用者,是没有关系的;③debounce是window调用的,返回的函数是触发keyup调用的,是keyup事件触发了返回的函数,而不是debounce方法
function debounce(method,delay) {
let timer = null;
console.log("window", this) //1、 debounce是window调用的
return function () {
console.log("keyup事件调用的11111", this) // 2、this指向$("#key)
let self = this,
args = arguments;
timer && clearTimeout(timer);
timer = setTimeout(function () {
method.apply(self,args);
},delay);
}
}
$("#key").on("keyup",debounce(function () {
var Val=$("#key").val();
console.log("keyup事件调用的222222", this) // 3、 this指向$("#key)
$.ajax({
type: "post",
url: "",
data: {name:Val},
dataType: "json",
success: function(res) {
}
});
},1000)
);
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!