zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    大数据分析服务器硬件配置如何选择
    Laravel 在哪些地方使用了 trait ?
    PHP 中 Traits 的简单使用
    Laravel中Trait的用法实例详解
    Trait 概览
    Laravel trait 使用心得
    Laravel 5 项目部署到生产环境的实践
    Laravel 的 Events(事件) 及 Observers(观察者)
    Eloquent Observer 的小坑
    Ubuntu 网卡多个 IP 地址
  • 原文地址:https://www.cnblogs.com/sunnyeve/p/13947832.html
Copyright © 2011-2022 走看看