實現add(1)(2)(3),柯里化
阿新 • • 發佈:2020-11-25
實現add(1)(2)(3)
主要有3個作用:引數複用、提前返回和延遲執行
考點:函式柯里化函式柯里化概念:柯里化(currying)是把接受多個引數
的函式轉變為接受一個單一引數的函式,並且返回接受餘下引數且返回結果的新的函式技術
// 1.粗暴版 function add(a) { return function (b) { return function (c) { return a + b + c; } } } console.log(add(1)(2)(3));
//2) 柯里化解決方案 // 引數長度固定 const curry = (fn) => (juedge = (...args) => args.length === fn.length ? fn(...args) : (...arg)=> judge(...args, ...arg)); const add=(a,b,c)=>a+b+c; const curryAdd=curry(add); console.log(curryAdd(1)(2)(3)) var add = function (m) { var temp = function (n) { return add(m + n); } temp.toString = function () { return m; } returntemp; }; console.log(add(3)(4)(5)); // 12 console.log(add(3)(6)(9)(25)); // 43
// 利用了函式的柯里化和閉包特性 function add(...arg) { let a = [...arg]; _add = function (...innerArg) { if (innerArg.length === 0) { return a.reduce(function (a, b) { return a + b }) }else { console.log(innerArg); [].push.apply(a, innerArg) return _add; } } return _add } console.log(add(1)(2,2,3)()) // 6