编写一个可任意调用次数的curried javascript函数,该函数在最后一次函数调用时返回值
Writing a curried javascript function that can be called an arbitrary number of times that returns a value on the very last function call
我目前正在处理一个编程问题,该问题要求我制作一个可以用这种方式调用的javascript函数。
add(1) // 1
add(1)(2) // 3
add(1)(2)(3); // 6
add(1)(2)(3)(4); // 10
add(1)(2)(3)(4)(5); // 15
我很难弄清楚如何让它在最后一次调用时返回值。
例如,为了使add(1)(2)
工作,那么add(1)
必须返回一个函数,但根据指令,add(1)
在自己调用时将返回1
。
我假设可以克服这一问题的一种方法是计算add
函数被连续调用的次数,但我想不出实现这一点的方法。有人能给我指明正确的方向吗?
我读过这两篇关于函数currying的文章(1,2),我理解它们,但我不知道在处理可变数量的参数时如何进行currying。
不可能用未知数量的参数来获取变参数函数。
如果add
是一个变差函数,你可以做一些类似的事情
var add5 = curryN(add, 5);
add5(1)(2)(3)(4)(5); //=> 15
var add3 = curryN(add, 3);
add3(1)(2)(3); //=> 6
无法避免这种情况,因为当前函数将继续返回函数,直到接收到最后一个参数,此时计算将运行。
唯一的其他选择是创建某种方式来"短路"参数,并通知函数参数已发送完毕。这需要类似的东西
var xadd = curryUntilUndefined(add);
xadd(1)(2)(3)(4)(5)(undefined); //=> 15
这里,undefined
表示变元自变量的结束。我真的不推荐这个,因为它会给你带来其他问题。更不用说,它不是特别好看。
使用valueOf()并非不可能。
function add(initNum) {
var sum = initNum;
var callback = function (num) {
sum += num;
return callback;
};
callback.valueOf = function () {
return sum;
};
return callback;
};
console.log(add(1)(2)==3); //true
console.log(add(1)(1)+1); //3
console.log(add(1)(2)(3).valueOf()); //6
相关文章:
- 从函数JavaScript返回不可变数组/对象
- 将对象传递给函数.JavaScript
- 如何定义const函数javascript(语法糖)
- 新的日期函数javascript
- TypeError:this.getAttribute不是一个函数-javascript
- 从函数javascript发送变量
- 扩展自容器函数Javascript
- 从内部函数javascript内部分配外部函数的对象
- 使用函数JavaScript中的函数
- 在这里使用回调函数(JavaScript)有什么好处吗
- 来自函数 Javascript 的 NaN 返回值 ||函数执行顺序
- 将“e”传递给一个新函数 - javascript
- 调用函数中的一个函数——Javascript
- 传递的变量不适用于我的函数-Javascript
- 如何将类方法设置为等于多个函数?-Javascript
- 显示php中的函数javascript
- 如何使用php代码创建函数Javascript弹出框
- 未调用的外部函数-javascript
- 如何在类中运行函数.Javascript
- 关闭mouseover上的一个函数——Javascript,jQuery