美文网首页
2019-01-19 JS 函数柯里化

2019-01-19 JS 函数柯里化

作者: rub1cky | 来源:发表于2019-01-19 14:29 被阅读0次

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

    特点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;
        }
    }
    

    相关文章

      网友评论

          本文标题:2019-01-19 JS 函数柯里化

          本文链接:https://www.haomeiwen.com/subject/bepadqtx.html