// 柯里化函数编程思想是指利用闭包的保存机制(形成闭包,把一些信息预习存储起来),供其上下文来使用
// 例题1
// 写一个函数fn 使得满足下面条件
// let res = fn(1,2,3,4,5)(3)
// console.log(res) // => 1+2+3+4+5+3 = 18
function fn(...params){
return function (...args) {
// 利用上面保存的parmas的值
args = args.concat(params)
return args.reduce(function(result,item){
return result + item
})
}
}
// ==============================================
// 例题2
// 写一个函数fn 使得满足下面条件
// 根据console.log输出的时候会加上一个f来表明是个函数 根据alert输出就不会
let add = curring()
let res = add(1)(2)(3)
console.log(res); // =>f 6
add = curring()
res = add(1,2,3)(4)
console.log(res); // => f 10
add = curring()
res = add(1)(2)(3)(4)(5)
console.log(res); // =>f 15
const curring = function curring() {
let params = []
const add = (...args) => {
// 把每一次add执行传递的实参拼接到params中
params = params.concat(args)
return add
}
// 重写add的Symbol.toPrimitive方法实现输出add函数时把之前parmas存储的值就和
add[Symbol.toPrimitive] = function toPrimitive() {
return params.reduce((result,item)=>result+item)
}
return add
}
柯理化函数编程思想
最新推荐文章于 2022-01-02 16:53:42 发布