2019-01-19 JS 函数柯里化

2019-01-19  本文已影响0人  rub1cky

是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

特点1. 返回一个函数
特点2. 将一个带有多个参数的函数转换为一次一个的函数的过程

  1. 闭包的作用
    闭包可以对函数参数进行持久化
function add(a) {
    return function(b){
        return function(c) {
            return a+b+c
        }
    }
}

let a = add(3)
let ab = a(5)
let abc = ab(2)
console.log(abc) // 10
  1. 偏函数

function partial(fn) {
// 获取保存函数第一次传入的参数
    let args = Array.prototype.slice.call(arguments, 1);
    return function() {
        //再次调用函数的时候传入的参数
        let args1 = Array.prototype.slice.call(arguments);
        // 第二次传入的参数和第一次的合并起来
        return fn.apply(this, args.concat(args1));
    };
}

function add(x, y) {
    return x + y 
}

let a = partial(add)
console.log(a('hello', ' world')) // hello world
let b = partial(add, 'hello')
console.log(b(' world')) // hello world
  1. compose 函数
    参数为函数名, 函数执行顺序为从右向左,即最右边的函数(最后一个参数)最先执行,执行完的结果作为参数传递给前一个函数(包裹它的函数),一直到整个函数执行完毕,return一个函数
function compose() {
    let args = arguments; 
    let start = args.length - 1;
    return function() {
        let i = start;
        //  执行当前函数,并获取当前函数的结果
        let result = args[start].apply(this, arguments);
        // 循环开始传入的参数,并把前一次执行的结果传入
        while(i--) {
            result = args[i].call(this, result);
        }
        return result;
    }
}
上一篇下一篇

猜你喜欢

热点阅读