JavaScript实现无限参数累加函数的三种解法

作者:半夏

时间:2026-10-27

浏览:642

本文探讨如何在JavaScript中实现一个支持无限参数调用的累加函数。通过三种不同思路:利用arguments.callee修改toString、固定层级嵌套返回、以及重写valueOf与toString属性,分别展示了闭包、柯里化及类型转换在函数式编程中的应用,帮助开发者深入理解函数执行与对象转换机制。

文章目录

题目描述与需求分析

题目要求补全函数 add(x) 的代码,使得调用 alert(add(2)(3)(4)) 时输出结果为 9。


解法一:利用arguments.callee与闭包

第一种解法思路如下:


具体实现代码如下:

 
//作者:貘大
function add(x) {
var c = 0;
return function(x) {
c = c + x ; arguments.callee.toString = function(){
return c;
}; 
return arguments.callee;
}(x);
}; 
alert(add(2)(3)(4));

解法二:固定层级嵌套返回

第二种解法思路如下:


具体实现代码如下:

 
//作者:三桂
function add(x) {
return function(y){
return function(z){
return x+y+z;
} 
} 
}; 
alert(add(2)(3)(4));

解法三:重写valueOf与toString属性

第三种解法思路如下:


具体实现代码如下:

 
//作者:司徒正美
function add (a){
if(!isFinite(add.i)){
add.i = a
}else {
add.i += a;
} 
add.valueOf = add.toString = function(){
return add.i
} 
return add;
} 
alert(add(2)(3)(4))

上述题目主要考察的是柯里化(curry)技术,详细原理可参考相关博客文章。


如果您有其他更优的解法,欢迎交流指正。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章