js系列二十四:额外知识补充,无限参数柯理化

本文探讨JavaScript中的柯理化,特别是在处理无限参数时的挑战。介绍了如何利用ES6的不定参数特性来解决这个问题,以及函数的隐形转换知识点,包括函数默认调用toString方法参与计算的情况。通过重写toString和valueOf方法,可以在函数参与计算时自定义输出结果。最后,文章展示了如何实现一个既能收集参数,又能在最终计算时返回期望结果的add函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在前端经常面试中,可能会运到这样一个问题涉及到柯理化的题目

add(1)(2)(3) = 6;
add(1, 2, 3)(4) = 10;
add(1)(2)(3)(4) = 15;

这个问题的目的是想让add执行之后返回一个函数能够继续执行,最终运算的结果是所有出现过的参数之和,而这个题目的难点在于参数的不固定,我们不知道函数会执行几次,因此不能使用前面封装的createCurry通用公式来转换一个柯理化函数,只能自己封装,该怎么样操作呢?在此之前,补充两个非常重要的知识点。

一个是ES6函数的不定参数。假设我们有一个数组,希望把这个数组中所有的子项展开传递给一个函数作为参数,那么应该怎么做?

// 大家思考一下,如何将args数组的子项展开作为add的参数传入
function add(a, b, c, d){
	return a + b + c + d;
}
var args = [1, 2, 3, 4];

在ES5中,我们可以借助之前学习过的apply来达到这个目的。

add.apply(null,args);

然而在ES6中,提供一种新型的语法来解决这个问题,那不就是不定参数?写法如下:

add(...args);

这两种写法是等效的,在接下来的实现中,我们会用到不定参数的特性。

第二个要补充的就是知识点函数的隐形转换

当函数直接参与其他计算得时候,函数会默认调用toString方法,直接将函数体转换为字符

博客
v8worker
05-08 2958
05-06 2941
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值