JavaScript函数节流的两种写法

JavaScript函数节流的概念是指限制事件触发的频率。例如,我们可以设置函数在一定时间内只能触发一次,这可以在处理一些高频事件时提高页面性能。

在JavaScript实现函数节流的时候,一般有两种常用的写法,下面将会分别进行介绍。

时间戳实现

时间戳实现是通过记录上一次执行的时间,和当前时间进行比较,如果时间差大于设定的时间阈值,就执行函数,否则就不执行。下面是一个示例说明:

function throttle(func, wait) {
    let previous = 0;
    return function() {
        let current = Date.now();
        if(current - previous > wait) {
            func.apply(this, arguments);
            previous = current;
        }
    }
}

function handle() {
    console.log('我被执行了');
}

window.addEventListener('resize', throttle(handle, 300));

这段代码通过使用闭包记录了previous变量来记录上一次函数执行的时间,如果当前时间与上一次执行函数的时间差大于wait时长,就执行函数,为了确保this指向正确,调用apply方法并传入thisarguments参数。

定时器实现

定时器实现是表示当高频事件触发时,函数不会立即执行,而是在一定时间后执行,如果在这个时间内再次触发了函数,就会重新计算延迟时间,以达到节流的效果。下面是一个示例说明:

function throttle(func, wait) {
    let timeout;
    return function() {
        if(!timeout) {
            timeout = setTimeout(() => {
                timeout = null;
                func.apply(this, arguments);
            }, wait);
        }
    }
}

function handle() {
    console.log('我被执行了');
}

window.addEventListener('resize', throttle(handle, 300));

这段代码通过将定时器ID保存在timeout变量中,只有当变量为空时才设置定时器,在函数最后清空定时器并执行。如果在等待时间内再次通知触发了throttle函数,就会取消之前创建的定时器,并重新创建一个定时器。

以上是两种JavaScript函数节流的常用实现方法,开发者可以根据实际需求选取不同的方法,以达到更好的节流效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript函数节流的两种写法 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Date对象格式化函数代码

    下面是详细的“Date对象格式化函数代码”的攻略: 什么是Date对象 Date对象是JavaScript的内置对象之一,用于表示日期和时间,可以获取当前时间、创建指定日期时间的对象、设置日期时间等操作。该对象拥有一些常用的方法,例如getDate()、getFullYear()、getMonth()等,用于获取日期和时间中的具体值。 Date对象格式化函数…

    JavaScript 2023年6月10日
    00
  • JavaScript观察者模式(经典)

    JavaScript观察者模式是一种常见的软件设计模式,被广泛应用于JavaScript代码中。其核心思想是,当某个对象(主题对象)发生变化时,能够通知订阅了它的观察者对象,并且观察者对象能够得到主题对象的变化信息并进行相应的处理。 简单来说,观察者模式可以使多个对象之间产生松耦合关系,让代码具备更好的可维护性和可扩展性。 以下是详细的攻略: 观察者模式的基…

    JavaScript 2023年6月10日
    00
  • JavaScript关键字this的用法总结

    JavaScript关键字this的用法总结 1. 什么是this 在 JavaScript 中,this 关键字指的是当前作用域下的对象,通常是在函数内部使用的。 2. this的用法 在 JavaScript 中,this 的值是动态确定的,即它的值依赖于函数的调用方式。下面就 someFunction 函数来说明 this 的用法。 function …

    JavaScript 2023年6月10日
    00
  • Vue前端路由hash与history差异深入了解

    Vue前端路由hash与history差异深入了解 前言 随着前端技术的发展,单页面应用(SPA)越来越多地出现在我们的生活中,而Vue作为目前较为流行的前端框架,其前端路由功能也越来越重要。本文将详细讲解Vue前端路由中hash与history两种模式的差异,以及它们的使用注意事项。 hash模式 在vue-router中,默认使用的是hash模式。has…

    JavaScript 2023年6月11日
    00
  • Vue手动埋点设计的方法实例

    Vue手动埋点设计是前端监控的一种重要手段,它可以用来收集用户的行为数据,帮助我们了解用户的操作行为,进而更好地进行网站优化。 下面我将介绍一些Vue手动埋点的设计方法: 1. 添加事件监听器 在Vue中,我们可以通过v-on指令来添加事件监听器,例如: <button v-on:click="onButtonClick">点…

    JavaScript 2023年6月11日
    00
  • vscode调试container中的程序的方法步骤

    下面是详细的 VS Code 调试 Container 中的程序的方法步骤: 步骤一:准备工作 安装 Docker 和 VS Code; 安装 VS Code 的 Docker 插件 Docker Extension; 创建需要调试代码的 Docker 容器,可以使用 Dockerfile 或者 docker-compose。 步骤二:创建 launch.j…

    JavaScript 2023年6月11日
    00
  • Javascript获取窗口(容器)的大小及位置参数列举及简要说明

    下面我来详细讲解一下”Javascript获取窗口(容器)的大小及位置参数列举及简要说明”的攻略。 获取容器大小 要获取容器大小,我们可以使用JavaScript中的clientWidth和clientHeight属性,它们会返回容器内部的宽度和高度。这里的容器可以是浏览器窗口,也可以是网页中的div、iframe等元素。 示例1:获取窗口的大小 const…

    JavaScript 2023年6月11日
    00
  • js实现动画特效的文字链接鼠标悬停提示的方法

    下面我来详细讲解下“js实现动画特效的文字链接鼠标悬停提示的方法”: 1. 实现动画特效的方法: 一般情况下,我们可以通过 CSS 的 transition 或者 animation 属性实现动画效果。首先,我们可以定义一个类名,比如:.animated,用来标记需要实现动画效果的元素。代码如下: .animated { transition: all .3…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部