JS中的高阶函数

K.K*_*tov 1 javascript higher-order-functions

我现在正在学习JavaScript.我有一些问题.以下代码来自Eloquent JavaScript:

function forEach(array, action) {
    for (var i = 0; i < array.length; i++)
        action(array[i]);
}

var numbers = [1, 2, 3, 4, 5],
    sum = 0;

forEach(numbers, function(number) {
    sum += number;
});

console.log(sum); 
Run Code Online (Sandbox Code Playgroud)

这段代码发生了什么?当调用forEach函数时,它如何确定数字是多少?它是如何从数字数组中提取数字的?

jfr*_*d00 5

这段代码发生了什么?

以下是您的forEach功能如何工作的说明:

  1. 您的forEach函数接受两个参数,即数组和函数
  2. 它设置了一个for迭代遍历数组的循环
  3. 然后,对于数组中的每个元素,它调用action(array[i])调用传入的函数并将其传递给一个数组元素. array[i]从数组中获取下一个项目并action(array[i])调用传入的函数并将其传递给数组中的下一个项目.

然后,当你这样称呼时:

forEach(numbers, function(number) {
    sum += number;
});
Run Code Online (Sandbox Code Playgroud)

它将为numbers数组中的每个数字调用一次传递给它的函数,当它调用该函数时,它会从数组中传递一个数字作为函数的第一个参数.

让一些人感到困惑的一件事是number你传递给函数的参数forEach只是你赋给函数第一个参数的名字.它可以命名为您想要的任何名称,与forEach()函数定义中使用的任何名称无关.函数参数的声明只是分配给每个参数的标签,使您更容易使用它们.你也可以这样做:

forEach(numbers, function(whateverYouWant) {
    sum += whateverYouWant;
});
Run Code Online (Sandbox Code Playgroud)

当调用forEach函数时,它如何确定数字是多少?

你的for循环一次遍历整个数组一个数字,并为数组中的每个数字调用一次回调函数.

它是如何从数字数组中提取数字的?

array[i]是从数组中提取数字的位置.这是用于从其中阵列中检索第i个值正常数组索引i从变化0到阵列减去1的长度.