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