1. 柯里化
- 预处理思想(预先存储,后续拿来直接用)
- 执行函数,形成一个闭包,把一些信息(私有变量和值)存储起来,闭包的
保存作用
- 以后其下级上下文中,如果需要用到这些值,直接基于作用域链查找机制,找到后拿来用
1. 实现函数
let res = fn(1, 2)(3);
console.log(res);
function fn() {
let outerArgs = Array.from(arguments);
return function anonymous() {
let innerArgs = Array.from(arguments);
let params = outerArgs.concat(innerArgs);
return params.reduce(function(result, item, index){
return result + item;
})
};
}
const fn = (...outerArgs) => {
return (...innerArgs) => {
return outerArgs.concat(innerArgs).reduce((result, item) => {
return result + item;
})
}
}
const fn = (...outerArgs) => (...innerArgs) => outerArgs.concat(innerArgs).reduce((result, item) => result + item
2.数组求和办法
2.1 eval执行字符串
[10, 20, 30].join('+')
eval("10+20+30")
2.2 循环遍历
let arr = [10, 20, 30],
total = 0;
arr.forEach(function(item) {
total += item;
})
2.3 reduce:
- 依次遍历数组的每一项,把上一轮遍历的结果作为下一轮遍历的起始参数
- arr.reducr([function], [calue])
let arr = [10, 20, 30, 40];
let result = arr.reduce(function(result, item, index) {
console.log(result, item, index)
return result + item;
})
let result = arr.reduce(function(result, item, index) {
console.log(result, item, index)
return result + item;
}, 0)
2.实现reduce
function reduce(arr, callback, initValue) {
let result = initValue,
i = 0;
if(typeof result === "undefined") {
result = arr[0];
i = 1;
}
for(; i < arr.length; i++) {
result = callback(result, arr[i], i);
}
return result;
}
let arr = [10, 20, 30, 40];
let result = reduce(arr, function(result, item, index) {
return result + item;
})
console.log(result);