zoukankan      html  css  js  c++  java
  • 柯里化函数

    从小红书到各种网站博客说的柯里化在印象里一直是不明觉厉的样子。

    今天好好研究下,首先说定义,柯里化通常也称部分求值,其含义是给函数分步传递参数,每次传递参数后,部分应用参数,并返回一个更具体的函数接受剩下的参数,中间可嵌套多层这样的接受部分参数函数,逐步缩小函数的适用范围,逐步求解,直至返回最后结果。

    接下来来一个通用的例子,

    var curring = function(fn){
            var _args = [];
            return function cb(){
    
                if(arguments.length === 0) {
                    return fn.apply(this, _args);
                }
    
                Array.prototype.push.apply(_args, [].slice.call(arguments));
    
                return cb;
            }
    
    
        }

    然后是给一个实际例子,
    var multi = function(){
    
            var total = 0;
            var argsArray = Array.prototype.slice.call(arguments);
                argsArray.forEach(function(item){
                    total += item;
                })
    
            return total
        };
    
        var calc = curring(multi);
    
        calc(1,2)(3)(4,5,6);
    
        console.log(calc()); //空白调用时才真正计算


    柯里化函数具有以下特点:

    • 函数可以作为参数传递

    • 函数能够作为函数的返回值

    • 闭包

  • 相关阅读:
    NOIP模拟 回文序列
    NOIP模拟 最佳序列
    BZOJ 2783 树
    BZOJ 3631 松鼠的新家
    洛谷 6道简单图论
    NOI模拟 颜色
    NOIP模拟 Game
    BZOJ1415 聪聪与可可
    Codeforces Round #443 (Div. 2) C: Short Program
    20171028洛谷NOIP模拟
  • 原文地址:https://www.cnblogs.com/xiaoweiy/p/6404781.html
Copyright © 2011-2022 走看看