防抖 节流_关于防抖和节流

虾扯蛋之函数防抖和节流 - 掘金
先贴贴 这个哥们的。 因为我看了很多,感觉大多都是复制。没有啥思考

在介绍以下这些问题的时候。先公示下我思考的时候出现的问题
1、如果你使用 onclick 和 addEventListenter 需要明白他们的区别 ,其实没啥好说的但是有一点请记住 onclick 不能使用闭包或者匿名函数。

2、那就是 在闭包的情况下 函数内部的变量为什么还是可以被return出来的function保持访问等等,可以从call stack和scope独立的角度来理解 。(这个我暂时也是迷糊的)但是以闭包的角度看就没啥问题。具体词法作用域的问题 堆 栈问题 可以以后深入

以上问题大致了解之后看我们的重点

一、防抖

概念:当持续触发事件时, 合并事件且不会去触发事件,当一定时间内没有触发再这个事件时,才真正去触发事件(当然分立即执行或者延迟执行)。

什么是防抖?能不能通俗点?举几个栗子

1、武侠 高手对付低手,一瞬间就给低手100次,100次全部打中。但是碰到另一个高手,打了100次 就就打中了2次

2、上公交 本来是1个人上车就 司机就关门开车, 但是一下来了很多人,于是就都上了 才关门开车

<script>
    var xcd = document.getElementById('xcd');
    var count = 1;
    //要执行的操作 数字+1
    function doSomething() {
        xcd.innerHTML = count++;
    };
    function debounce(doSomething, wait) {
        var timeout; 
        return function () {
            var _this = this,
                _arguments = arguments;
            console.log(timeout); // 点击次数
            clearTimeout(timeout);
            timeout = setTimeout(function () {
                doSomething.apply(_this, _arguments);
            }, wait);
        }
    }
    xcd.onclick = debounce(doSomething, 1000);
</script>

上述 会出现啥效果呢

就是我连续点击 count 就加1 然后显示出来,如果我超过一秒没有点击 再点一次就再加1
到这里你应该彻底明白啥事防抖了

如下图

cf00be614b168d3eab619189c3573302.png
点击了红色区域2次 从没有变成了1

8990410507110fd4d34494be656b26e2.png
疯狂点击 就执行了1次 变成了2

以上就是最基本的防抖措施

二、函数节流

概念:持续触发事件时,throttle 会合并一定时间内的事件,并在该时间结束时真正去触发一次事件

这个不是很绕口 ,可以理解啊。 就是一定时间内 只能触发一次

   function doSomething1() {
        xcd1.innerHTML = count++;
    };

    const throttle = (func, wait, ...args) => {
        let pre = 0;
        return function () {
            const context = this;
            let now = Date.now();
            console.log(now);
            if (now - pre >= wait) {
                func.apply(context, args);
                pre = Date.now();
            }
        }
    }
    xcd1.onclick = throttle(doSomething1, 1000);

e34e54520b72311192cd236a94f78d8d.png
疯狂点击 ,这么多次输出这么多时间,生效的只有6次

当然你们还可以扩展

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值