1. 程式人生 > 實用技巧 >實現add(1)(2)(3),柯里化

實現add(1)(2)(3),柯里化

實現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; } return
temp; }; 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