【问题标题】:First sums, second doesn't -> why?第一个总和,第二个不 -> 为什么?
【发布时间】:2023-03-12 00:24:01
【问题描述】:
<!-- 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>

【问题讨论】:

    标签: javascript


    【解决方案1】:

    它认为你想要

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

    在第二次通话中

    【讨论】:

      【解决方案2】:

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

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

      在第一种情况下,这会返回一个进行汇总的函数:

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

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

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

      【讨论】:

        【解决方案3】:

        您正在 fold1 函数中执行 newAccumulator。传入 newAccumulator 而不是 newAccumulator();

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

        新的

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

        【讨论】:

          【解决方案4】:

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

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

          在第二个例子中,你执行 newAccumulator 并传递结果,但是 newAccumulator 的 result 不是一个函数。

          此外,您命名为 foldl 的函数通常称为“foreach”。如果您将结果存储在一个数组中,它可能被称为“地图”。 Foldl 通常会通过一个函数将总数与总数相加并返回新的总数来累加总数。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-07-31
            • 2016-08-15
            • 2016-10-20
            相关资源
            最近更新 更多