1. 闭包相关
- 处理缓存
var fn = (function () {
var arr = []; //用来缓存的数组
return function (val) {
if (arr.indexOf(val) == -1) {
//缓存中没有则表示需要执行
arr.push(val); //将参数push到缓存数组中
} else {
console.log("此次函数不需要执行");
}
};
})();
fn(10);
fn(10);
fn(100);
2. Curry
- 处理累加
sum(2,3) == 5;
sum(2)(3) == 5;
sum(2,3,4) == 9;
sum(2)(3)(4) == 9;
方法1
function sum (...args) {
// 无参数
if (!args.length) return;
//有参数进行累加
function add (list) {
return list.reduce((prev, cur) => {
return prev + cur
}, 0)
}
let total = add(args)
// 构建闭包,存储累加值
function k (...args) {
total += add(args)
return k
}
//重写k的toString方法
k.toString = () => total
return k
}
方法2
function curry(fn, args) {
var length = fn.length;
var args = args || [];
return function(){
newArgs = args.concat(Array.prototype.slice.call(arguments));
if (newArgs.length < length) {
return curry.call(this,fn,newArgs);
}else{
return fn.apply(this,newArgs);
}
}
}