zoukankan      html  css  js  c++  java
  • js基础进阶--函数柯里化carrying

    欢迎访问我的个人博客:http://www.xiaolongwu.cn

    定义

    函数柯里化就是创建已经设置单个参数或者多个参数的函数,函数变为接受一个参数,返回一个值

    来个例子

        function add(){
        
            // 将传进来的实参转换为数组arr
            var arr = Array.prototype.slice.call(arguments);
            var mun = 0;
            
            for (let i = 0; i < arr.length; i++) {
                mun += arr[i];
            }
            
            // 返回传进来的实参之和
            return mun;
        }
    
        function carrying(fn){
            // 获取要复用的参数,除去第一个参数并转化为数组
            var argsOut = Array.prototype.slice.call(arguments,1);
            
            return function (){
                // 取的自身的参数并转换为数组
                var argsInner = Array.prototype.slice.call(arguments);
                
                // 合并复用和自身的数组
                var argsTotle = argsInner.concat(argsOut);
                
                // 调用传进来的fn函数,并将数组元素,利用apply的特点依次传入fn
                return fn.apply(null,argsTotle);
            }
        }
    
        var a1 = carrying(add,4,6,7);  // 4,6,7 为复用参数
        // 这里的a1为carrying函数中return出来的匿名函数
            
        console.log(a1()); //17  这里自身参数没有
    
        console.log(a1(2,3,45,66)) //133  这里2,3,45,66为自身参数
        
        var a2 = carrying(add,1);
    
        console.log(a2(4,2,3,4,66)) // 80
        
    

    我的github资源地址:https://github.com/js基础进阶--函数柯里化carrying.md

    我的个人博客地址:http://www.xiaolongwu.cn

    我的博客园地址:http://www.cnblogs.com/wuxiaolong555

    我的CSDN博客地址:https://blog.csdn.net/wxl1555

    如果您对我的博客内容有疑惑或质疑的地方,请在下方评论区留言,或邮件给我,共同学习进步。

    邮箱:wuxiaolong802@163.com

  • 相关阅读:
    senium
    学习记录
    方法参数化
    洛谷1892 团伙
    洛谷2661 信息传递
    洛谷2661 信息传递
    洛谷1576最小花费
    洛谷1576最小花费
    最短路 Dijkstra模板
    堆排(模板)
  • 原文地址:https://www.cnblogs.com/wuxiaolong555/p/9048942.html
Copyright © 2011-2022 走看看