// 該函式就是接受不了多個引數
// 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())