JS 函数柯里化 console.log(curry(柯)(里)(化) === curry(柯, 里, 化)) // true

参考优质博客:5.函数柯里化
函数柯里化:
允许在一次函数调用中传入数量不足的参数。调用了,但是不会返回结果,而是等待继续调用时传入剩余参数。

看代码:

function Sum(a, b, c, d) {
    
    
	return a + b + c + d;
}

const sum = curry(Sum)
sum(1, 2, 3, 4) // 10
sum(1)(2)(3)(4) // 10
sum(1, 2)(3, 4) // 10

curry函数实现:

function curry(fn, ...args) {
    
    
  if (fn.length > args.length) {
    
    
    return ((...arguments) => {
    
    
      return curry(fn, ...args, ...arguments);
    })
  } else {
    
    
    return fn(...args);
  }
}

fn.length:该函数执行所必须传入的参数数量
args:函数实际传入的参数
第一行的意思是,如果参数数目不够,就返回出一个箭头函数。
箭头函数是干嘛的呢,准备接受剩余参数的。
我们看一下sum接收到了什么:
console.log(sum.toString()) // (...arguments) => { return curry(fn, ...args, ...arguments); }
说明curry(Sum)就执行了一遍,给sum赋了个值。
然后sum再次执行,一次一次的接受剩余参数,不够就再返回一个箭头函数,每次拿到的参数数目越来越接近fn.length,最后拿到了全部的参数,就执行fn(...args)

猜你喜欢

转载自blog.csdn.net/weixin_45543674/article/details/121410673