函数式编程范示

185 阅读1分钟

什么是函数式编程?

函数式编程中的函数不是指程序中的函数(方法),而是数学中的函数即映射关系

相同的输入始终得到相同的输出

函数式编程用来描述数据之间的映射

function add(a,b){
     return a + b;
}
let sum = add(2,3);
console.log(sum);

什么是高阶函数?

高阶函数:

1可以把函数作为参数传递给另一个函数

2可以把函数作为另一个函数的返回值

例:

let arr = [1, 3, 4, 7, 8];
Array.prototype.myForEach = function(fn) {
    for (var i = 0; i < this.length; i++) {
        fn(this[i], i, this);
    }
}
arr.myForEach(function(item,index,names){
    console.log(item,index,names)
})

例2

//创建一个新数组
let arr = [1, 3, 4, 7, 8];
Array.prototype.myfilter=function(fn){
    let resut=[];
    for (var i = 0; i < this.length; i++) {
        if(fn(this[i])){
            result.push(this[i])
        }
    }
    return result;
}
arr.myfilter(function(item) {
    return item % 2 === 0
})

列3

let arr = [1, 3, 4, 7, 8];
Array.prototype.mymap=function(fn){
    const result=[];
    for (var i = 0; i < this.length; i++) {
        result.push(fn(this[i]))
    }
    return result
}
arr.mymap(function(item){
    return item*2
})

2函数作为返回值

function once(fn){
    let flag=false;
    return function(){
        if(!flag){
            flag=true;
            return fn.apply(this,arguments)
        }
    }
}

纯函数相同输入等到相同的输出,代表库lodash

柯里化(currying)

当一个函数有多个参数的时候传递一部分参数调用它

然后返回一个新的函数接收剩余的参数,返回结果

function curry(func){
    return function curriedFn(...args){
        if(args.length < func.length){
            return function(){
               return curriedFn(...args.concat(Array.from(arguments)));
            }
        }
        return func(...args);
    }
}

函数组合(函数组合从右到左)