一些关于JS的过程抽象的高阶函数的使用的例子(单次点击,防抖,节流)

简介: 在JavaScript中,我们很常见的是需要掌握**过程抽象**的思想。对于过程抽象,是函数式编程思想的应用。而 **高阶函数(HOF)**  便是过程抽象的体现之一。接下来我们就来一起学习一下常见的高阶函数。# Once在一些场景下,我们可能会遇到这样的需求,我们做了一个报名页面,然后需要用户提交报名成功的个人信息,但是用户可能会因为手抖,或者是一些网络的卡顿之类的原因,造成了用户在短时间内大量点击提交按钮,这时候可能会突然出现很多用户提交的相同的信息,为了避免这种情况,我们可以在前端做出一定的优化。我们可以利用这样的高阶函数来完成优化:```function once

在JavaScript中,我们很常见的是需要掌握过程抽象的思想。对于过程抽象,是函数式编程思想的应用。而 高阶函数(HOF)  便是过程抽象的体现之一。

接下来我们就来一起学习一下常见的高阶函数。

Once

在一些场景下,我们可能会遇到这样的需求,我们做了一个报名页面,然后需要用户提交报名成功的个人信息,但是用户可能会因为手抖,或者是一些网络的卡顿之类的原因,造成了用户在短时间内大量点击提交按钮,这时候可能会突然出现很多用户提交的相同的信息,为了避免这种情况,我们可以在前端做出一定的优化。

我们可以利用这样的高阶函数来完成优化:

function once(fn){
    return function(...args){
        if(fn){
            const ret = fn.apply(this,args);
            fn = null;
            return ret;
        }
    }
}

结合上面的"公式",我们可以写出只能点击一次的提交按钮了。


function once(fn){
    return function(...args){
        if(fn){
            const ret = fn.apply(this,args);
            fn = null;
            return ret;
        }
    }
}

const commit = once(function CommitFun(username,password) {
    if(username !== "" && password !== "") {
        // ...这里是提交代码
        console.log("提交了一次");
    }
});

commit("abc","123456");

commit("abc","123456");

我们模拟一下表单提交的场景,在nodejs上执行一下,打印的结果如下:

image.png

分析一下上面的结果,我们模拟了用户提交了两次的场景,不过我们查看控制台,发现只有一次提交结果,说明我们的只能点击一次的高阶函数封装的没有问题,再看一下源码,我们的Once函数是讲函数作为参数传递到once中去,第一次提交的时候if没什么问题,而后续的操作中,因为fn的值为null,高阶函数不会返回,所以不会提交。

节流

我们再看一个节流的例子

现在我们的场景变了,假如我们在做一个整点秒杀活动.我们要如何做呢?不做任何限制的话,流量等资源开销过大,这时候我们就要考虑到节流,比如秒杀抢购按钮,我们不限制他的点击次数,但是我们可以对他做一个节流的操作,让他事件每次触发间隔50ms之类的.

看一下节流的高阶函数

function throttle(fn,time = 500){
    let timer;
    return function(...args){
        if(timer == null){
            fn.apply(this,args);
            timer = setTimeout(()=>{
                timer = null;
            },time);
        }
    }
}

防抖

想象一下这个场景:我们要开发一个自动保存功能的网页版的ide,不断地自动保存开销过大,我们希望用户不再操作500ms后,自动保存的网页版ide,我们可以设置防抖,在用户不再操做500ms后,触发保存事件。

    let timer;
    return function(...args){
        clearTimeout(timer);
        timer = setTimeout(()=>{
            fn.apply(this,args);
        },dur);
       
    }
}
相关文章
|
2月前
|
前端开发 JavaScript Java
【JavaScript】JavaScript 防抖与节流:以游戏智慧解锁实战奥秘
【JavaScript】JavaScript 防抖与节流:以游戏智慧解锁实战奥秘
38 3
|
2月前
|
JavaScript 前端开发 UED
深入理解JavaScript中的节流与防抖技术
理解并合理运用节流与防抖技术,可以帮助我们优化事件处理函数的执行频率,从而提升应用的性能和用户体验。这两种技术通过减少不必要的计算和DOM操作,使得Web应用程序能够更加流畅地运行。 通过掌握防抖和节流的实现原理及应用场景,开发者可以更加灵活地编写高效且性能优化的代码,对于面对高频事件处理时尤其重要。在开发中合理选择使用防抖或节流,将直接影响到应用的响应性和效率。
29 1
|
8天前
|
JavaScript 前端开发 UED
JS 防抖与节流
防抖和节流是优化高频事件处理的技术。针对如`scroll`、`resize`等频繁触发的事件,它们能有效减少不必要的回调执行,节省资源。防抖确保在一段时间内仅执行最后一次操作,适用于输入框自动补全等场景;而节流则按固定间隔执行函数,适合拖拽、滚动事件。通过简单的JavaScript实现,可以显著提升应用性能和用户体验。
15 1
JS 防抖与节流
|
4天前
|
JavaScript Java
点击按钮,向下添加目录。Java script+jQuery写法
点击按钮,向下添加目录。Java script+jQuery写法
8 1
|
4天前
|
JavaScript Java
分别使用js与jquery写 单击按钮时出现内容 点击删除按钮不会再向下出现
分别使用js与jquery写 单击按钮时出现内容 点击删除按钮不会再向下出现
9 1
|
7天前
|
JavaScript 前端开发
js点击抽奖符合条件触发点击次数
js点击抽奖符合条件触发点击次数
14 1
|
2月前
|
JavaScript 前端开发 测试技术
JavaScript进阶-高阶函数与柯里化
【6月更文挑战第18天】在JavaScript中,高阶函数和柯里化是函数式编程的核心。高阶函数接收或返回函数,常用于数组操作和事件处理。柯里化将多参数函数转化为单参数的逐次求值过程,用于参数预绑定和函数组合。两者能简化逻辑、提高复用性,但也需注意易错点,如混淆参数、过度柯里化,应适度使用并配合测试保证正确性。通过实践和使用工具,如lodash的`_.curry`,能更好地利用这些技术。
|
1月前
|
测试技术 UED
断网之后的页面,Autox.js是点击还是上下滑动比较好?
断网之后的页面,Autox.js是点击还是上下滑动比较好?
|
2月前
|
JavaScript 定位技术 API
Js地图路线规划以及点击获取经纬度
Js地图路线规划以及点击获取经纬度
|
2月前
|
JavaScript
JS图表生成以及点击修改图表样式
JS图表生成以及点击修改图表样式

热门文章

最新文章