2019-01-19 JS 函数柯里化

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

特点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;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容