• 2020-11-09(记录今天在线学习知识)


    1、关于高阶函数的一些事

    tips: 在 JavaScript 中,函数为一等公民,所谓的 ‘一等公民’,指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作
    为参数,传入另一个函数,或作为其他函数的返回值。

    高阶函数定义:(至少满足下列一个条件的函数)
    1.1:接受一个或多个函数作为输入。
    1.2:输出一个函数。

    接收一个或多个函数作为输入,即函数作为参数传递。这种应用场景,比如,Array.prototype.map() 和 Array.prototype.filter()高阶函数
    eg: Array.prototype.map
    const array = [1,2,3,4];
    const map = array.map(x=>x*2);//这里会输出 [2,4,6,8]
    const filters = ['aaaaaa','bbbbb','ccc','dddd'];
    const result = filters.filter(x=>x.length>=5);//这里会输出 filters数组里面长度>=5的值 ['aaaaaa','bbbbb']

    而输出一个函数,即调用高阶函数之后,会返回一个新的函数。常见的debounce ,throttle (防抖,节流函数)

    2、函数组合

    //函数组合就是将两个或两个以上的函数组合生成一个新函数的过程:
    const compose = function(...funs){ //f,g 都是函数
    return function(x){ //x 是组合生成新函数的参数
    return funs.reduce(function(arg,fn){
    return fn(arg);
    },x)
    }
    }
    2.1、函数组合的作用
    function loweCase(params){
    return params && typeof params === 'string' ? params.toLowerCase() : params //这个是转小写字母
    }
    ...
    //还有很多,如 转大写字母,去除空格,截取字符串
    function trim(params){
    return typeof params === 'string'?params.trim():params
    }
    function split(params,delimiter=','){
    return typeof params === 'string'? params.split(delimiter):split
    }
    const trimLowerCaseSplit = compose(trim,lowerCase,split);
    trimLowerCaseSplit('a,b,C');//输出

    3、柯里化

    柯里化(currying) 是一种处理函数中含有多个参数的方法,并在只允许单一参数的框架中使用这些函数。

    与柯里化相反的是 Uncurrying,一种使用匿名单参数函数来实现多参数函数的方法。比如:
    const func = function(a){
    return function(b){
    return a*a + b*b
    }
    }
    func(3)(4);

    柯里化作用:
    3.1、参数复用
    3.2、延迟计算/运行

    柯里化实现:
    function curry(func){
    return function curried(...args){
    if(args.length>=func.length){
    return func.apply(this,args);
    }else{
    return curried.apply(this,args.concat(args2));
    }
    }
    }

    4、偏函数

    //写到这里,突然觉得自己有点迷,因为实际开发中没有用到这个...突然有点香菇了...

    偏函数概念: 是指固定一个函数的某些参数,然后产生另一个更小元的函数。而所谓的元是指函数参数的个数,比如含有一个参数的函数被称为一元函数

    偏函数用于固定一个或多个参数,并返回一个可以接收剩余参数的函数。
    function partial(fn){
    let args = [].slice.call(arguments,1);
    return function(){
    const newArgs = args.concat([].slice.call(arguments));
    return fn.apply(this,newArgs);
    }
    }

    以及还有惰性函数,缓存函数等。

    参考链接:https://juejin.im/post/6892886272377880583

  • 相关阅读:
    Enterprise Library Step By Step系列(一):配置应用程序块——入门篇
    Enterprise Library Step By Step系列(八):日志和监测应用程序块——进阶篇
    在ASP.NET页面中冻结DataGrid的列或头部
    数据库设计技巧系列(五)——各种小技巧
    用任务计划实现数据库的异地备份
    如何更好的与人沟通?[图]
    在Asp.net中如何用SQLDMO来获取SQL Server中的对象信息
    SQL Server 2012 Express LocalDB
    Clay: 创建和使用深层次对象图
    VS 2012 的 单元测试 和 测试资源管理器
  • 原文地址:https://www.cnblogs.com/sunnyeve/p/13947832.html
Copyright © 2020-2023  润新知