// 如果简写的箭头函数return的是一个对象,这个对象要用括号括起来(语法上的要求)
x => ({key: x})
高阶函数应用
AOP切片编程
// 我们不希望如下,在原有的goschool中加吃饭功能
function goschool(){console.log("吃饭");console.log("上学");
}
// 而是不修改原有功能,去添加新的功能
function eat() {console.log("吃饭");
}
function goschool() {console.log("上学");
}
Function.prototype.before = function (cb) {return () => {cb();this();};
};
const someFn = goschool.before(eat);
someFn();//吃饭,上学
函数参数复用
function getTargetStr(region, repoffice) {return '大屏' + region + repoffice
}
console.log(getTargetStr('中国', '深圳'))
console.log(getTargetStr('中国', '上海'))// 第一个参数都是中国,那么这个参数是可以复用的,如下
function getTargetStr(region) {return function(repoffice){return '大屏' + region + repoffice}
}
const chinaRegion = getTargetStr('中国')
console.log(chinaRegion('深圳'))
console.log(chinaRegion('上海'))
将嵌套执行的函数平铺
function multiply(x) {return x * 5;
}
function add(x) {return x + 3;
}
// 嵌套执行就是一个函数的返回值作为另一个函数的参数
const value = multiply(add(2));// 管道函数实现
function pipe(...fns) {return function (data) {return fns.reduce((acc, itemFn) => {return itemFn(acc);}, data);};
}
const value = pipe(add, multiply)(2);