函数柯里化
1.协议复用
const url_https = url_curring('https://'),
url1 = url_https('cn.bing.com', '/search?q=掘金'),
url2 = url_https('cn.bing.com', '/search?q=思否'),
url3 = url_https('cn.bing.com', '/search?q=知乎'),
url4 = url_https('cn.bing.com', '/search?q=简书'),
url5 = url_https('cn.bing.com', '/search?q=博客园')
2.兼容性处理
const whichEvent = (function (win) {
if (win.addEventListener) {
return function (element, type, handler, useCapture) {
element.addEventListener(type, function (e) {
handler.call(element, e);
}, useCapture);
}
} else {
return function (element, type, handler) {
element.attachEvent('on' + type, function (e) {
handler.call(element, e);
})
}
}
})(window);
3.无限累加
function sum() {
var toArray = Array.prototype.slice,
args = toArray.call(arguments);
var _add = function () {
var arg2 = toArray.call(arguments);
args = args.concat(arg2);
return _add;
}
_add.toString = function () {
return args.reduce((prev, cur) => {
return prev + cur;
}, 0);
}
return _add;
}
console.log(sum(1, 2)(3)(4, 5, 6) == 21);
4.属性遍历
const nameList = [ { hero: '关羽', profession: '发育路' }, { hero: '张飞', profession: '辅助' }, { hero: '黄忠', profession: '中单' }, { hero: '马超', profession: '对抗' }, { hero: '赵云', profession: '打野' } ]
const curring = name => ele => ele[name],
name_hero = curring('hero'),
name_profession = curring('profession');
console.log(nameList.map(name_hero)); // ['关羽', '张飞', '黄忠', '马超', '赵云']
console.log(nameList.map(name_profession)); // ['发育路', '辅助', '中单', '对抗', '打野']
总结
巧用柯里化,代码更易维护