.函數(shù)的去抖:
什么叫做函數(shù)的去抖,就相當(dāng)于你從函數(shù)的開頭到結(jié)尾只執(zhí)行一次的的叫做去抖:
也就是他給你一巴掌,他十分鐘原諒你,到了2分鐘了他有給你一巴掌,所以你還的等10分鐘.
例子:
var timer = null;
? ? function handlerSearch(){
? ? ? ? cliearTimeout(timer);
? ? ? ? timer = setTimeout(function(){
? ? ? ? ? ? console.log(1)
? ? ? ? },500)
? ? }
函數(shù)的節(jié)流:
在你設(shè)置的時(shí)間之內(nèi)只執(zhí)行一次某段代碼,
也就是:你給他一巴掌,他也是10分鐘原諒你,但是你只有在這個(gè)10分鐘內(nèi)部不動(dòng)他,他就會(huì)原諒你,只有你動(dòng)了那就完了,所以你必須10分鐘后再打他
例子:
var timer = null;
?? ?function handlerSearch(){
?? ??? ?if(timer!=null){
?? ??? ??? ?return false
?? ??? ?}
?? ?timer = setTimeout(function(){
?? ??? ?console.log(1);
?? ??? ?timer = unll;
?? ?},200)
}
函數(shù)節(jié)流與函數(shù)去抖的封裝
// 函數(shù)去抖;
function _debounce(callback,dealy){
?? ?// 利用閉包顽照,讓 timer 私有化;
?? ?var timer = null;
?? ?return function(){
?? ?// 去抖函數(shù); 確保,callback在正確的時(shí)機(jī)被調(diào)用?
?? ?// 事件執(zhí)行的時(shí)候匆光,真正會(huì)執(zhí)行的函數(shù)是這個(gè);
?? ??? ?if(timer !== null) return false;
?? ??? ??? ?// 如果已經(jīng)過了規(guī)定的時(shí)間可以再次執(zhí)行代碼了;
?? ??? ??? ?timer = setTimeout(function(){
?? ??? ??? ?callback();
?? ??? ??? ?timer = null;
?? ??? ?},dealy)
?? ?}
}
// 函數(shù)節(jié)流;
function _throttle(callback,dealy){
?? ?// 利用閉包术吝,讓 timer 私有化;
?? ?var timer = null;
?? ?return function(){
?? ??? ?clearTimeout(timer);
?? ??? ?// 如果已經(jīng)過了規(guī)定的時(shí)間可以再次執(zhí)行代碼了;
?? ??? ?timer = setTimeout(function(){
?? ??? ??? ?callback();
?? ??? ?},dealy)
?? ?}
}