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