Alan's blog Alan's blog
首页
思考感悟
技术学习
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Alan wu

前端小时
首页
思考感悟
技术学习
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前端常考代码

    • 模版字符串
    • 版本比较
    • 洗牌算法
    • 大数相加或相乘
    • 防抖或节流
      • 一、防抖
      • 二、节流
    • 并发请求
  • LeetCode Top 100

  • 算法
  • 前端常考代码
alanwu
2023-06-14
目录

防抖或节流

# 一、防抖

const debounce = (fn, time) => {
    // 利用闭包避免全局污染
    let timeout = null;
    return function () {
        if (timeout) {
            // 在定时期间,那么清除原来计时器 重新计时(核心)
            clearTimeout(timeout);
        }
        // 设置定时器
        timeout = setTimeout(() => {
            // 执行函数
            fn.apply(this, arguments)
        }, time);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 二、节流

function throttle(fn,delay) {
    let canRun = true; // 通过闭包保存一个标记
    return function () {
         // 在函数开头判断标记是否为true,不为true则return
        if (!canRun) return;
         // 立即设置为false
        canRun = false;
        // 将外部传入的函数的执行放在setTimeout中
        setTimeout(() => { 
        // 最后在setTimeout执行完毕后再把标记设置为true(关键)表示可以执行下一次循环了。
        // 当定时器没有执行的时候标记永远是false,在开头被return掉
            fn.apply(this, arguments);
            canRun = true;
        }, delay);
    };
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
编辑 (opens new window)
上次更新: 2023/06/15, 08:09:17
大数相加或相乘
并发请求

← 大数相加或相乘 并发请求→

最近更新
01
HTTPS:让数据传输更安全
06-15
02
沙盒:页面和系统之间的隔离墙
06-15
03
CSRF攻击:陌生链接不要随便点
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Alan Wu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式