- 我对函数柯里化的认知
function add1(a) {
return function (b) {
return a+b
}
}
console.log(add1(1)(2));//3
- 面试题手撕不出来的柯里化–我裂开😭
const fn=function (a,b,c) {
return a+b+c
}
const curry1=function (fn,...args) {
if(args.length>=fn.length){
return fn(...args)
}else{
return function(...Nextargs) {
// args.concat(Nextargs) 原地不修改
return curry1(fn,...args.concat(Nextargs))
}
}
}
const curried=curry1(fn)
console.log(curried(1,2,3));//6
console.log(curried(1)(2,3));//6
console.log(curried(1)(2)(3));//6
- 仰望高端无限
const add=function(...arr) {
let curSum= arr.reduce((acc,cur)=>acc+=cur,0)
let nextFun=function (...nextArgs) {
return add(curSum,...nextArgs)
}
nextFun.toString=function () {
// console.log(curSum);
return curSum
}
return nextFun
}
console.log(add(1));//1
console.log(add(1)(2));//3
console.log(add(1)(2)(3));//6
转换
const test = function (a) {
return a
}
console.log(test('bbb'));//bbb
console.log(test);//[Function: test]
console.log(test === test.valueOf());//true
console.log(test === test.toString());//false
test.toString= function () {
return 'go'
}
console.log(test);//go
console.log(test.valueOf())//go
console.log(test === test.valueOf());//true
test.valueOf = function () {
return 'yes'
}
console.log(test.valueOf())//yes
console.log(test.toString())//go
console.log(test)//go