# 实现 add(1)(2)(3)
# 昨日回顾
# 实现 lodash 的_.get
function a1(object, paths, defaultValue) {
paths = path.replace(/\[(\d+)\]/g, ".$1").split(".");
let result = object;
for (const p of paths) {
result = Object(result)[p];
if (result == undefined) {
return defaultValue;
}
}
return result;
}
function a2(object, paths, defaultValue) {
return (
paths.split(".").reduce((a, b) => (a || {})[b], object) || defaultValue
);
}
# 今日解题
考点:函数柯里化
函数柯里化概念:柯里化(Currying)是把接受多个参数的函数转变为接受一个单一参数的函数,并返回接受余下的参数且返回结果的新函数的技术。
function add(...args) {
console.log(args);
return args.reduce((a, b) => a + b);
}
function currying(fn) {
let args = [];
return function temp(...newArgs) {
if (newArgs.length) {
args = [...args, ...newArgs];
return temp;
} else {
let val = fn.apply(this, args);
args = [];
return val;
}
};
}
let addCurry = currying(add);
console.log(addCurry(1)(2)(3)(4, 5)()); //15
console.log(addCurry(1)(2)(3, 4, 5)()); //15
console.log(addCurry(1)(2, 3, 4, 5)()); //15
# 柯里化的好处
- 提高实用性
- 延迟执行 【累积传入的参数,最后执行】
- 固定易变元素【最典型的代表应用:bind 函数用以固定 this 这个易变的对象】