【问题标题】:how can i implement this logic add(1)(2)(1).. upto (n)?我怎样才能实现这个逻辑 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',以及其他小的奇怪问题)
  • 这就是我所说的“滥用”。

标签: javascript syntax logic


【解决方案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));
    

    【讨论】:

    • 这里的重点是启用特殊语法,如果您只想在函数中添加任意数字,甚至不需要数组。
    猜你喜欢
    • 2013-09-28
    • 2011-01-26
    • 1970-01-01
    • 2013-11-13
    • 2021-10-01
    • 2020-02-07
    • 1970-01-01
    • 2023-02-02
    • 2019-11-10
    相关资源
    最近更新 更多