wiki: 是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数, 并且返回接受余下的参数而且返回结果的新函数的技术。
柯里化的好处:
性能瓶颈以及lamda.js 、uncurrying

实现一个通用的柯里化函数
参考资料:
function getUrl(scheme, host, path) { return `${scheme}:/${host}/${path}` } join(`https`,`taobao.com`, `user1`) join(`https`,`taobao.com`, `user2`) join(`https`,`taobao.com`, `user3`)复制成功
const getUrl = (scheme) => { return (host,path) => `${scheme}:/${host}/${path}` } const join = getUrl(`https`) join(`jd.com`, `user`) join(`taobao.com`, `user1`) join(`taobao.com`, `user2`) join(`taobao.com`, `user3`)复制成功
const getUrl = (scheme) => { return (host) => { return (path) => `${scheme}:/${host}/${path}` } } const join1 = getUrl(`https`) const join2 = join1(`taobao.com`) getUrl(`https`)('jd.com')('user') join2('user1') join2('user2') join2('user3')复制成功
function check(regExp, data) { return regExp.test(data) // result: true or false } console.log(check(/\d+/g,10)) console.log(check(/\d+/g,'emo'))复制成功
function check(regExp) { return (data) => regExp.test(data) } let hasNumber = check(/\d+/g) console.log(hasNumber(10)) console.log(hasNumber('emo'))复制成功
实现bind
// test driven let obj = {name:'re0', age:15} function fn() { console.log(this.name) return `${this.name},${this.age}` } let f = fn.myBind(obj) f() //实现 Function.prototype.myBind = (ctx, ...args) => { return () => { return this.apply(ctx, args) // return this.call(ctx, ...args) } }复制成功
待定