- 核心需要注意两点:参数子集的收集、返回函数
- 下面见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
转载于:https://my.oschina.net/u/3407699/blog/3020309