js高級技巧之柯里化

  • 核心須要注意兩點:參數子集的收集、返回函數
  • 下面見bind的封裝中使用到柯里化:
    function bind (fn, context) {
        // 獲取fn、context以外的參數
        var args = Array.prototype.slice.call(arguments, 2)
        return function (){
            // 收集內部參數
            var innerArys = Array.prototype.slice.call(arguments)
            // 合併參數
            var finalArys = arys.concat(innerArys);
            return fn.apply(context, finalArys);
        }
    }
  • 見使用例子:
    var handler = {
        message: 'event handled',
        handlerClick: function (param1, param2, event) {
            console.log(event);
            console.log(this.message + ':' + param1 + ':' + param1);
        }
    };
    var btn = document.getElementById('myBtn');
    btn.onclick = bind(handler.handlerClick, handler, 'zhanhui', 'shihuan');
    // 執行的過程當中參數的收集步驟是: 
    // 1.先收集外部參數'zhanhui'和'shihuan'這兩個字符串
    // 2.接着收集內部參數event
    // 3.最後將這三個參數合併,並一併傳給handler.handlerClick
  • 平時擼代碼中常常用到場景有以下幾種:
    • 參數複用
    • 延遲運行,返回的是函數。
    • 下面見例子:
      1.減小重複傳遞不變的部分參數
      2.將柯里化後的callback參數傳遞給map, filter等函數。
      3.後續補充代碼示例
      https://segmentfault.com/a/1190000015281061?utm_source=tag-newest
相關文章
相關標籤/搜索