有人可以解释SUM函数任务吗?

时间:2016-06-04 17:39:27

标签: javascript nested sum

创建一个类似的函数和:sum(a)(b)= a + b并接受任意数量的括号。

任务取自this learning source



function sum(a) {
  
  var sum = a 
  
  function f(b) {
    sum += b
    return f
  }
  
  f.toString = function() { return sum }
  
  return f
}

alert( sum(1)(2) )  // 3
alert( sum(5)(-1)(2) )  // 6
alert( sum(6)(-1)(-2)(-3) )  // 0
alert( sum(0)(1)(2)(3)(4)(5) )  // 15




任何人都可以解释它是如何工作的吗? A和B的论证很好,但是在代码中我们使用其他争论(在超过两个的情况下)? 为什么我们需要在这里使用toString方法?它与问题或警报有关。 另外,我尝试使用 console.log 而不是 alert 使用相同的代码,但它没有用。这里的问题是什么?

2 个答案:

答案 0 :(得分:1)

从图片中取出警报,然后调用此代码:

sum(1)(2)

您可能对双括号感到困惑 - 这里发生的是您首先调用sum函数,并将1的参数传递给它。当您将1传递给sum时,您将1设置为名为sum的局部变量,然后将函数声明为f并用作返回值来自sum函数。

因此,由于您调用了sum并返回了一个函数(f),因此您可以使用参数2调用 函数。< / p>

所以从本质上讲,你真的是这样做的:

var someFunc= sum(1);
someFunc(2);

可以像这样重写:

sum(1)(2);

答案 1 :(得分:0)

function sum(a) {  
var sum = a 
//return function f;
function f(b) {
sum += b
return f
}
//override of toString to print sum
f.toString = function() { return sum }
return f;
}
alert(sum(1)(2));

警告说明(sum(1)(2))

1.sum(1)首先返回一个带和值为1的闭包

f(b){
    sum=sum+b; //sum=1 here from sum(1)
}

2.接下来f(2)被称为

sum=sum+b// sum=1,b=2 so sum=3

和f返回。由于f被覆盖,它打印的总和值为3