防抖:函數(shù)一定時(shí)間內(nèi)只執(zhí)行最后一次,比如一個(gè)公交司機(jī),等到最后一個(gè)乘客上車(chē)時(shí)才關(guān)門(mén),只需要關(guān)一次
節(jié)流:函數(shù)每一段固定時(shí)間內(nèi)執(zhí)行一次,比如地鐵閘門(mén),每五秒關(guān)一次,固定五秒
防抖的實(shí)現(xiàn)思路:每次觸發(fā)事件時(shí)都取消之前的延時(shí)調(diào)用方法:
?let handle;
function? debounce(fn, delay) {
? return? function(e) {
????????// 取消之前的延時(shí)調(diào)用
????????clearTimeout(handle);
????????handle = setTimeout(() => {
????????????fn(e);
????????}, delay);
????}
}
節(jié)流的實(shí)現(xiàn)思路:每次觸發(fā)事件時(shí)都判斷當(dāng)前是否有等待執(zhí)行的延時(shí)函數(shù)
function throttle(fn, delay) {
????let runFlag = false;
????return function(e) {
????????// 判斷之前的調(diào)用是否完成
????????if (runFlag) {
????????????return false;
????????}
????????runFlag = true;
????????setTimeout(() => {
????????????fn(e);
????????????runFlag = false;
????????}, delay)
????}
}