首页 > 其他分享 >Js函数柯里化

Js函数柯里化

时间:2024-08-06 09:55:36浏览次数:4  
标签:function console log Js add 柯里化 return curry 函数


// 该函数就是接受不了多个参数
// function add(x, y) {
//     return x + y;
// }
// console.log(add(1, 2)); // 3
// console.log(add(5, 7)); // 12


// 接下来我们要将其进行柯里化

// function add(x){
//     return function(y){
//         return x + y;
//     }
// }

// console.log(add(1)(2));

// 固定参数

// function check(reg, txt) {
//     return reg.test(txt)
// }

// // 即使是相同的正则表达式,也需要重新传递一次
// console.log(check(/\d+/g, 'test1')); // true
// console.log(check(/\d+/g, 'testtest')); // false

// function check(reg){
//     return function(str){
//         return reg.test(str);
//     }
// }

// var func = check(/\d+/g);
// console.log(func('test1'));
// console.log(func('testtest'));
// console.log(func('abc'));


// console.log(check(/[a-z]+/g)('test'));


// 封装一个通用的柯里化函数

// function curry() {
//     var fn = arguments[0]; // 拿到要执行的函数
//     var args = Array.prototype.slice.call(arguments, 1);
//     // 接下来,我们就需要判断这个参数是否足够
//     if(args.length === fn.length){
//         // 进入此 if,说明第一次参数就是传够了的
//         // 直接执行 fn 函数
//         return fn.apply(this, args);
//     }
//     // 下面是处理参数不够的情况
//     function _curry(){
//         args.push(...arguments);
//         if(args.length === fn.length){
//             return fn.apply(this, args);
//         }
//         return _curry;
//     }
//     return _curry;
// }

// // 测试 1
// function add(a, b, c) {
//     return a + b + c;
// }

// console.log(curry(add)(1)(2)(3)); // 6
// console.log(curry(add, 1)(2)(3)); // 6
// console.log(curry(add, 1, 2, 3)); // 6
// console.log(curry(add, 1)(3, 4)); // 8

// var addCurrying = curry(add)(2);
// console.log(addCurrying(7)(8)); // 17

// // 测试 2
// function check(reg, txt) {
//     return reg.test(txt)
// }
// var hasNumber = curry(check)(/\d+/g);
// console.log(hasNumber('test1'));// true


// 一道面试题

// add(1)(2)(3) = 6;
// add(1, 2, 3)(4) = 10;
// add(1)(2)(3)(4)(5) = 15;


function add(){
    // 拿到第一次调用的所有的参数
    var args = Array.prototype.slice.call(arguments);
    
    // 该函数会被返回,该函数的作用是继续收集参数
    function _adder(){
        args.push(...arguments);
        return _adder;
    }

    // 当调用 toString 方法的时候,说明我不要再接收参数了
    // 执行计算操作
    _adder.toString = function(){
        return args.reduce((a,b)=>a+b);
    }

    return _adder;
}

console.log(add(1)(2)(3).toString())
console.log(add(1, 2, 3)(4).toString())
console.log(add(1)(2)(3,4,5)(6,7).toString())




标签:function,console,log,Js,add,柯里化,return,curry,函数
From: https://www.cnblogs.com/bingquan1/p/18344570

相关文章

  • Node.js安装配置(Windows系统)
    一、Node.js简单说就是运行在服务端的JavaScript二、安装Node.js步骤:1、首先找到Windows下的安装包(.msi)       建议安装Node.js v4.4.3(长期支持版本)  ^_^-------本安装教程以v5.2.0为例   Node.js安装包及源码下载地址为:https://no......
  • RSA非对称加密,前端JS加密,后端PHP解密
    RSA公钥/私钥在线生成:http://web.chacuo.net/netrsakeypair通过以上网址生成公钥/私钥对,私钥格式这里选择【PKCS#1】,如:公钥:-----BEGINPUBLICKEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDN3El4yr2maFvDo5PKIzkkiitJZEOTLNINH0RD0PL5Lob+YzbRJO6DX27SRuHcdlK7mFtkQvooW......
  • js、php实现前后端数据的base64编码和解码
    客户要求密码必须加密后再传送。javascript代码的加密函数:<scriptlanguage='javascript'>functionutf16to8(str){varout,i,len,c;out="";len=str.length;for(i=0;i<len;i++){c=str.charCodeAt(i);if(......
  • Hashtable工具类 - C#小函数类推荐
          此文记录的是一个Hashtable的增强版本,以前没泛型的时候笔者喜欢用Hashtable,性能刚刚的。/***Hashtable工具类AustinLiu刘恒辉ProjectManagerandSoftwareDesignerE-Mail:[email protected]:http://lzhdim.cnblogs.comD......
  • PHP中如何实现函数的可变参数列表
    在PHP中,实现函数的可变参数列表主要有两种方式:使用func_get_args()函数和使用可变数量的参数(通过...操作符,自PHP5.6.0起引入)。1.使用func_get_args()函数func_get_args()函数用于获取传递给函数的参数列表,并作为一个数组返回。这种方式不需要在函数定义时明确指定参数的数......
  • 一个基础的js,html示例程序
    需求背景:一个html,一个js脚本。要求html里面提供若干按钮。第1个按钮,点击之后,触发js里面的add函数,第2个按钮点击之后触发js里面的del函数。第3个按钮,点击之后,在按钮右侧,显示当前时间,每点击一次刷新下一次。还有,在每个函数调用里面,函数开通打印当前时间戳(精确到毫秒),函......
  • C语言 ——— 学习并使用 strtok 函数
    目录strtok函数的功能strtok函数的参数以及返回值​编辑使用strtok函数使用方法一:根据需要分段的字符串写代码使用方法二:配合for循环巧妙使用strtok函数的功能将字符串拆分为各个段,举例说明:输入:第一个参数:"[email protected]" ;第二个参数:"@."输出(分段输出):"rjiaju"......
  • 状态方程到传递函数
    现代控制理论中描述物体的运动用状态方程,在自动控制原理中则使用的是传递函数,他们之间通过什么方式转换呢?通过一个例子说明转换过程,假设一个系统如下:其中u表示输入,y表示输出,x表示中间的状态。求系统的传递函数需要用到拉普拉斯变换,将第一个等式和第二个等式进行拉普拉斯变换,则:......
  • C语言day11(string函数族、递归函数、结构体、共用体、枚举)
    【1】string函数族1.strlen头文件:#include<string.h>格式:size_tstrlen(constchar*s);功能:计算字符串实际长度,不包括\0参数:s:目标字符串首地址返回值:字符串实际长度2.strcpy    头文件:#include<string.h>    格式:char*strcpy(char*dest,......
  • C++ 拷贝构造函数语义与移动构造函数语义
    拷贝构造函数语义与移动构造函数语义一、拷贝构造函数语义1.编译器生成拷贝构造函数的条件2.自定义拷贝构造函数3.深拷贝与浅拷贝4.拷贝构造函数的使用场景5.拷贝赋值运算符6.规则五(RuleofFive)二、移动构造函数语义1.禁止生成移动构造函数2.生成移动构造函数......