我怎样才能实现这个逻辑 add(1)(2)(1).. upto (n)?

Posted

技术标签:

【中文标题】我怎样才能实现这个逻辑 add(1)(2)(1).. upto (n)?【英文标题】:how can i implement this logic add(1)(2)(1).. upto (n)? 【发布时间】:2014-01-12 10:16:43 【问题描述】:

我知道这个问题已经以有限的能力得到回答,但我希望它有 n 次 n 参数?

function add(x) 
    return function(y) 
        if (typeof y !== 'undefined') 
            x = x + y;
            return arguments.callee;
         else 
            return x;
        
    ;

add(1)(2)(3)(); //6
add(1)(1)(1)(1)(1)(1)(); //6

问题是这仅在我添加额外的空括号 () 时才有效 这样做不行add(1)(2)(3)

reference question

【问题讨论】:

你应该把你的问题说清楚 @AndréPena 问题很清楚,也许您在这种 javascript 编程风格方面经验不足,无法理解它。 我认为很清楚。他想无限次地柯里化一个函数,而不必执行最后一个函数,立即获得值。不可能,那些东西不能共存。但是,你可以滥用toStringvalueOf @elclanrs javascript 可以在对象被视为字符串的情况下自动执行toString 方法,因此这是可能的,它只是在它是一个对象这一事实中附带了一些警告可以读取为字符串。 (例如 typeof 等于 'function',以及其他小的奇怪问题) 这就是我所说的“滥用”。 【参考方案1】:

试试这个:

function add(x) 
    var fn = function(y) 
        x = x + y;
        return arguments.callee;
    ;

    fn.toString = function()  return x; ;

    return fn;

【讨论】:

+1 但如果在console.log中使用,这将不起作用 值得一提的是arguments.callee不应该再用了,更喜欢命名函数。【参考方案2】:

以下代码的工作方式与您所要求的完全一样:

function add(a)

    var c=a,b=function(d)c+=d;return arguments.callee;;
    b.toString=function()return c;return b;

请注意,某些操作会检测作为函数给出的结果,但任何需要字符串或整数的函数都会看到正确的值。

【讨论】:

【参考方案3】:

尝试将您的数字作为数组发送并更改您的函数代码以反映这些更改。

注意:代码未经测试。

function add(x) 
   var result = 0;
   for (i = 0; i < x.length;i++)
   result+=x[i];
   
   return result;


add(new Array(1,2,3));

【讨论】:

这里的重点是启用特殊语法,如果您只想在函数中添加任意数字,甚至不需要数组。

以上是关于我怎样才能实现这个逻辑 add(1)(2)(1).. upto (n)?的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能有效地做到这一点? [关闭]

C# 怎样才能实现客户端通过服务器端连接数据库服务器???

怎样才能实现前后端分离,提高开发工作效率?

如果序列,我怎样才能简化这个?

我如何通过键更改js中的数组[关闭]

在 cmake 中,我怎样才能始终执行一个进程? (或从 add_custom_command 捕获标准输出)