// 该函数就是接受不了多个参数
// 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