JavaScript实现无限参数累加函数的三种解法
作者:半夏时间:2026-10-27 04:35:57浏览:643
本文探讨如何在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)技术,详细原理可参考相关博客文章。
如果您有其他更优的解法,欢迎交流指正。
作者最新文章
JavaScript闭包与类(Class)的区别及适用场景对比
2026-11-05 15:48:57
JavaScript入门要学ES6吗?let与箭头函数等新特性解析
2026-11-05 14:49:16
JavaScript 8种数据类型详解:基本类型与引用类型的区别
2026-11-05 14:25:15
怎么在JavaScript中使用async/await优化Ajax异步流程
2026-11-05 13:56:15
JavaScript replace回调函数实现动态正则替换逻辑
2026-11-05 13:52:13
相关标签:
