<!-- 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>

最佳答案

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

foldl([1, 2, 3, 4], newAccumulator());


在第一种情况下,这将返回一个求和的函数:

return function(i) { total += i; };


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

foldl([1, 2, 3, 4], newAccumulator);

关于javascript - 首先总结,第二不->为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1050625/

10-12 00:38