前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【青训营】月影带我学js——过程抽象

【青训营】月影带我学js——过程抽象

作者头像
大熊G
发布2022-11-14 16:51:58
2080
发布2022-11-14 16:51:58
举报

theme: channing-cyan

什么是过程抽象

所谓过程抽象 其实是一种思维方式,也是一种编程方式,我们可以把函数当成一个控制器,控制这函数的输入和输出,它也是函数式编程思想的基础。

例子

我们想象一个应用场景,就是常见的表单提交,一般我们都应该限制点击提交后不能再次提交,防止多次提交。

为了能够让‘只执行一次’的需求来覆盖不同的事件处理,我们可以将这个需求剥离出来,这个过程也被称为过程抽象。 我们可以创建一个once的高阶函数,让它来处理这个操作。

代码语言:javascript
复制
  function once(fn){
        return function(...args){
            if(fn){
                const ret = fn.apply(this,args);
                fn = null;
                return ret;
            }
        }
    }

我们这里给这个函数传入function,第一次进来首先会为true,if中的内容会执行,在执行之后立马function被设为null,下次进入这个函数的时候,if就不会执行了,因为null在条件判断中相当于false。

高阶函数

上面用到高阶函数,讲一下什么是高阶函数,

高阶函数一般以函数作为参数并且把函数作为返回值。常用于作为函数装饰器。上面的例子我们也可以在函数处理前后添加其他操作,比如在发送数据的时候添加请求头等等。

image.png
image.png

高阶函数除了上面once还有其他常用的

简单写俩个例子

代码语言:javascript
复制
    // 纯函数
    function add(a,b){
        return a + b;
    };
    // 非纯函数
    let num = 6;
    function add1(){
      return  num++;
    }
    console.log(add(1,2));//3
    console.log(add1());//6
    console.log(add1());//7

高阶函数场景分析

想象一个场景,比如我们的代码库要更新,有些代码要废弃或者重新修改,但是目前还有很多人在用,我们要给现在用的人一个提升要更新的操作。

一般情况下我们首先想到的就是找到要更改的函数,里面添加console.warn('这个函数要更新啦-大熊Jackson')

但是我们这样操作的话容易出现bug,而且很多的话容易累死。我们可以设计一个纯函数,把需要修改的函数放进去统一进行添加之后再暴露出来。

代码语言:javascript
复制
 import {bar as bar1,foo as foo1} from "jackson";
    function depracation(fn){
        return function(...args){
            console.log('要修改了-Jackson');
            return fn.apply(this,...args);
        }
    }
    const foo = depracation(foo1);
    const bar = depracation(bar1);
    export {foo,bar};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • theme: channing-cyan
  • 什么是过程抽象
    • 例子
      • 高阶函数
    • 高阶函数场景分析
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档