* 防抖:指定時間內 頻繁觸發一個事件,以最后一次觸發為準
* 節流:指定時間內 頻繁觸發一個事件,只會觸發一次
> 應用場景有很多比如:
>
> 防抖是: input搜索,用戶在不斷輸入內容的時候,用防抖來減少請求的次數并且節約請求資源
>
> 節流:場景普遍就是按鈕點擊,一秒點擊 10 下會發起 10 次請求,節流以后 1 秒點再多次,都只會觸發一次
下面我們來實現
~~~
js復制代碼 // 防抖
// fn 需要防抖的函數,delay 為定時器時間
function debounce(fn,delay){
let timer = null? // 用于保存定時器
return function () {
// 如果timer存在 就清除定時器,重新計時
if(timer){
clearTimeout(timeout);
}
//設置定時器,規定時間后執行真實要執行的函數
timeout = setTimeout(() => {
fn.apply(this);
}, delay);
}
}
// 節流
function throttle(fn) {
let timer = null; // 首先設定一個變量,沒有執行定時器時,默認為 null
return function () {
if (timer) return; // 當定時器沒有執行的時候timer永遠是false,后面無需執行
timer = setTimeout(() => {
fn.apply(this, arguments);
// 最后在setTimeout執行完畢后再把標記設置為true(關鍵)
// 表示可以執行下一次循環了。
timer = null;
}, 1000);
};
}
~~~
- Js方法速查表
- Js 代碼片段
- Js中類型判斷
- 判斷類型函數
- 處理 null、NaN 和 undefined 的 JS 代碼片段
- 檢查是否為null
- 檢查undefined
- 檢查 NaN
- 如果為 null 或undefined則默認為某個值
- 如果為 NaN,則默認為一個值
- 檢查值是否為 null、undefined或 NaN
- 可選鏈接(?.)
- 空合并運算符(??)
- 將 null 或 undefined 轉換為布爾值
- 將 NaN 轉換為布爾值
- 處理函數參數中的 null 或 undefined
- 從數組中刪除 null 或undefined的值
- 檢測:是否是一個函數
- 函數:是否屬于異步函數
- 檢測:是否為一個安全數組
- 檢測:對象是否為一個安全對象
- 字符串相關方法
- 字符串填充:padStart 和 padEnd
- 字符串反轉:reverse
- 第一個字母大寫:toUpperCase
- 字符串數組分割:擴展運算符
- 使用多個分隔符分割字符串
- 檢查字符串是否包含:includes
- 檢查字符串的開頭或結尾是否有特定序列:startsWith 和 endsWith 方法
- 字符串替換:正則或replaceAll
- 數字:截斷數字
- 數字:四舍五入
- 數字:補零
- 數組相關方法
- 數組:找到最接近的數值
- 數組:生成數組
- 數組:打亂數組
- 數組:簡單數據去重
- 數組:唯一值數據去重
- 數組:多數組取交集
- 數組:查找最大值索引
- 數組:查找最小值索引
- 數組:壓縮多個數組
- 對象相關方法
- 對象:刪除無效屬性
- 對象:反轉對象鍵值
- 對象:字符串轉對象
- 比較兩個對象
- Js中判斷空對象
- 正則表達式
- 正則:手機號格式化
- 正則:去除多余空格
- 正則:每千位添加分隔符
- 正則:校驗6到18位大小寫字母數字下劃線組成的密碼
- 日期相關的方法
- 日期:判斷日期是否為今天
- 日期:日期轉換
- 日期:秒數轉換
- 日期:獲取某年某月的第一天
- 日期:獲取某年某月的最后一天
- 日期:獲取某年月份天數
- 本地存儲相關方法
- 獲取cookie
- BOM相關
- Web:重新加載當前頁面
- Web:滾動到頁面頂部
- Web:元素滾動
- Web:檢查當前是否IE瀏覽器
- Web:從給定文本中剝離html
- 常用高頻方法
- 防抖/節流
- 進制轉換
- 復制文本
- 過濾特殊字符
- 隨機顏色生成
- 將16進制的顏色轉換成rgb
- 將 RGB 轉換為十六進制
- 獲取隨機ip
- uuid:需要生成一個id
- 強制等待
- Ts 代碼片段
- omit函數