Javascript .数组的reduce方法

Javascript .数组的reduce方法,javascript,arrays,Javascript,Arrays,您好,这里是一些使用数组缩减方法的w3学校代码。我正在尝试学习如何使用它,但是我有点困惑为什么这个代码可以工作。原因是numbers.reduce(getSum)doesent在函数getSum中获取参数。如果我们甚至不给getSum函数提供参数,我们的代码怎么知道数组中有多少东西,以及如何求和呢。在W3上,它表示array.reduce(函数(total、currentValue、currentIndex、arr)、initialValue),还表示需要total和currentValue。但

您好,这里是一些使用数组缩减方法的w3学校代码。我正在尝试学习如何使用它,但是我有点困惑为什么这个代码可以工作。原因是
numbers.reduce(getSum)
doesent在函数getSum中获取参数。如果我们甚至不给getSum函数提供参数,我们的代码怎么知道数组中有多少东西,以及如何求和呢。在W3上,它表示
array.reduce(函数(total、currentValue、currentIndex、arr)、initialValue)
,还表示需要total和currentValue。但我们这里甚至没有他们,是吗?我们只是有我们的功能!请帮忙

<!DOCTYPE html>
<html>
<body>

<p>Click the button to get the sum of the numbers in the array.</p>
<button onclick="myFunction()">Try it</button>

<p>Sum of numbers in array: <span id="demo"></span></p>

<script>
var numbers = [65, 44, 12, 4];

function getSum(total, num) {
    return total + num;
}
function myFunction(item) {
    document.getElementById("demo").innerHTML = numbers.reduce(getSum);
}
</script>

</body>
</html>

reduce函数的语法是
arr.reduce(callback[,initialValue])

这意味着getSum被称为回调

什么是回拨?简单地说,它是对一个函数的引用,该函数将在第二时刻被调用

一个简单的例子(但网络上充满了关于回调的指南):

正如您所看到的,print是一个函数,对它的引用作为参数传递给
callCallback()
。然后在
callCallback()中调用该函数

让我们回到你的问题:

reduce()
需要引用函数作为第一个参数

reduce是一个函数,它将在内部执行一些操作(以查看可能的实现)

在某个地方
reduce()
将回调作为参数传递的函数,传递右参数

我们有一个类似这样的例子:

reduce(callback) {
  callback(previousValue, currentValue);
}
因此,对于数组中的每个值,将调用作为参数传递的函数,并使用
previousValue
currentValue


当然reduce()肯定更长,但最后它会从数组中提取一些东西,做一些魔术,然后传递给作为回调参数传递的函数。

reduce函数的语法是
arr.reduce(callback[,initialValue])

这意味着getSum被称为回调

什么是回拨?简单地说,它是对一个函数的引用,该函数将在第二时刻被调用

一个简单的例子(但网络上充满了关于回调的指南):

正如您所看到的,print是一个函数,对它的引用作为参数传递给
callCallback()
。然后在
callCallback()中调用该函数

让我们回到你的问题:

reduce()
需要引用函数作为第一个参数

reduce是一个函数,它将在内部执行一些操作(以查看可能的实现)

在某个地方
reduce()
将回调作为参数传递的函数,传递右参数

我们有一个类似这样的例子:

reduce(callback) {
  callback(previousValue, currentValue);
}
因此,对于数组中的每个值,将调用作为参数传递的函数,并使用
previousValue
currentValue


当然reduce()肯定更长,但最后它会从数组中取出一些东西,做一些魔术,然后传递给作为回调参数传递的函数。

在函数
getSum
中,有两个参数,
total
num
它们等价于
total
currentValue
,分别在w3学校示例中。在javascript中,函数中不必有相同的变量名。传递给
reduce
的函数需要两个参数,第一个参数用作“运行总计”,第二个参数用作“当前值”


至于问题,它如何知道数组中有多少个值,请看一下提供的polyfill。它提供了一些关于如何为数组实现
reduce
函数的见解,以及了解数组的长度

在函数
getSum
中,您有两个参数,
total
num
,这两个参数分别相当于w3示例中的
total
currentValue
。在javascript中,函数中不必有相同的变量名。传递给
reduce
的函数需要两个参数,第一个参数用作“运行总计”,第二个参数用作“当前值”

至于问题,它如何知道数组中有多少个值,请看一下提供的polyfill。它提供了一些关于如何为数组实现
reduce
函数的见解,以及了解数组的长度

array.reduce(回调[,initialValue])

回调=对数组的每个值执行的函数,有4个参数

1) previousValue=在上一次回调中返回的值或使用reduce给出的初始值

2) currentValue=数组中当前元素的值

3) currentIndex=数组中当前元素的索引

4) array=调用它的数组

initialValue是可选的,并在第一次回调中为以前的值提供一个起始值

所以实际上你有论点。初始值(上一次回调的结果)、实际数字、数字索引和数字数组

编辑:如果不提供初始值,则以前的值将是数组的第一个元素,当前值将是第二个元素

编辑2:您第一次跑步时的上一个值为65,当前值为44。它们加起来,得到的结果是109,并将其作为结果值。函数将一直被调用,直到您完成数组。这意味着第一次回调(109)的返回值将是第二次回调的前一个值。同样,它将把前一个(109)和当前的元素相加,成为ar中的下一个(第三个)元素
reduce(callback) {
  callback(previousValue, currentValue);
}
function test() {}
test();
numbers.reduce(functionVariableReference); // pass function definition
numbers.reduce(function() {}) //anonymous function definition
function test(nOne, nTwo) {console.log(nOne + nTwo);}
function passTwoAndThree(callback) {callback(2,3)};
passTwoAndThree(test) // will log 5;