Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 第一个和,第二个不';t->;为什么? var合计=0; var newacculator=函数() { 返回函数(i){total+=i;}; } var foldl=函数(arr,putNum) { 对于(变量i=0;i_Javascript - Fatal编程技术网

Javascript 第一个和,第二个不';t->;为什么? var合计=0; var newacculator=函数() { 返回函数(i){total+=i;}; } var foldl=函数(arr,putNum) { 对于(变量i=0;i

Javascript 第一个和,第二个不';t->;为什么? var合计=0; var newacculator=函数() { 返回函数(i){total+=i;}; } var foldl=函数(arr,putNum) { 对于(变量i=0;i,javascript,Javascript,你认为你想要什么 <!-- first --> <script> var total = 0; var newAccumulator = function() { return function(i) { total += i; }; } var foldl = function(arr, putNum) { for (var i = 0; i < arr.length; ++i) { putNum(arr[i]); } } foldl(

你认为你想要什么

<!-- first -->
<script>
var total = 0;
var newAccumulator = function()
{
  return function(i) { total += i; };
}

var foldl = function(arr, putNum)
{
  for (var i = 0; i < arr.length; ++i)
  {
    putNum(arr[i]);
  }
}

foldl([1, 2, 3, 4], newAccumulator());
document.write("Sum: " + total + "<br/>");
</script>

<!-- second -->
<script>
var total = 0;
var newAccumulator = function(i)
{
  total += i;
}

var foldl = function(arr, putNum)
{
  for (var i = 0; i < arr.length; ++i)
  {
    putNum(arr[i]);
  }
}

foldl([1, 2, 3, 4], newAccumulator());
document.write("Sum: " + total + "<br/>");
</script>

在第二个调用中,您正在fold1函数中执行newacculator。传入newacculator而不是newacculator()

旧的

新的


在对
foldl
的调用中,调用
newacculator
函数:

foldl([1, 2, 3, 4], newAccumulator);
在第一种情况下,这将返回一个进行求和的函数:

foldl([1, 2, 3, 4], newAccumulator());
在第二种情况下,对
newacculator
的调用不会返回任何内容,因此
foldl
没有可以调用的函数来计算总和。
您应该将NewAccumulator直接传递给
foldl
,而不是它(不)返回的值:


第二个不起作用,因为您没有传递foldl函数

在第一个示例中,您执行newacculator,newacculator返回一个函数,该函数被传递给foldl。。。Foldl使用该函数对数字求和

在第二个示例中,执行newacculator并传递结果,但newacculator的结果不是函数

此外,您命名为foldl的函数通常称为“foreach”。如果您将结果存储在一个数组中,它可能被称为“map”。Foldl通常通过使用一个函数将数字添加到总数中并返回新的总数来累加总数

foldl([1, 2, 3, 4], newAccumulator);
foldl([1, 2, 3, 4], newAccumulator());
return function(i) { total += i; };
foldl([1, 2, 3, 4], newAccumulator);