概念
函数柯里化(currying)是指一种闭包使用技巧,可以达到函数参数有更高的灵活度。
内容
指的每次函数只处理一个参数,并返回处理剩余参数的新函数的过程。即每个柯里化过程都会将待处理的其中一个参数进行处理。
语法
//传统function demo(num1,num2){}//将demo柯里化之后function demo(num1){function inner(num2){//处理num1 和num2}return inner;}
例子:三个数字的相加
//传统function add(num1,num2,num3){return num1+num2+num3;}//柯里化:一层function curryingAdd(num1,num2){function inner(num3){return num1 +num2 +num3;}return inner;}// 5+6+7 5+6+8 5+6+9 5+6+10let add = curryingAdd(5,6);add(8);add(9);add(10)
柯里化一个参数之后,后面的第三个参数就会更加灵活,同时可以重复调用 add函数,达到前两个参数的复用。
//两层柯里化function curryingAdd2(num1){function inner(num2){function inner2(num3){return num1 +num2 +num3;}return inner2;}return inner;}//每个参数都可以定制let add5 = curryingAdd2(5);let add56 = add5(6);console.log(add56(7));
柯里化应用-正则表达式
//传统的方式两个参数必须同时提供,不是很灵活//完成手机号的验证function checkReg(reg,str){return reg.test(str);}checkReg( /^1[3-9]\d{9}$/,'12909090909');checkReg( /^1[3-9]\d{9}$/,'12909090988');checkReg( /^[A-Z]\w{5,15}$/,'12909090977');checkReg( /^[A-Z]\w{5,15}$/,'12909090966');
//可以实现第二个参数的灵活度,以及第一个正则表达式参数的复用。//一层柯里化后function checkRegCurrying(reg){function inner(str){return reg.test(str);}}//手机号验证let checkPhone = checkRegCurrying(/^1[3-9]\d{9}$/);checkPhone('12909090909')checkPhone('12909090908')checkPhone('12909090907')//密码验证let checkPass = checkRegCurrying(/^[A-Z]\w{5,15}$/);checkPass("ad1232");
