EloquentJavaScript。抽象数组遍历。第二版。第 83 页
Eloquent JavaScript. Abstracting Array Traversal. 2nd Ed. pg 83
我不知道这是怎么回事。这是代码。
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);
我知道 sum =+ number;
正在传递给 forEach
并循环遍历数组编号。但我无法弄清楚这是如何发生的细节。像这样 function(number) {sum =+ number}
代替 action
for (var i = 0; i < [1, 2, 3, 4, 5].length; i++)
function(number) {
sum += number;
} (array[i]);
}
没有意义,运行也没有。什么是
var numbers = [1, 2, 3, 4, 5], sum = 0;
for (var i = 0; i < numbers.length; i++)
sum += (numbers[i]);
debug(sum);
console.log(sum);
这是我可以压缩并使其工作的最大数量。但是你怎么到这里呢?换句话说,到底发生了什么?
感谢您的帮助。这个概念似乎是 Haverbeke 方法的基础,所以我想我最好理解它。
正确的翻译,正如@FelixKling 所说的那样(即使他没有),效果很好:
var array = numbers;
var action = function(number) {
sum += number;
}
for (var i = 0; i < array.length; i++) {
action(array[i]);
}
forEach
函数正在为数组中的每个元素调用 action
。
所有 forEach
在这里所做的就是抽象出一个循环,就像您几乎拥有的循环一样:
for (var i = 0; i < numbers.length; i++){
sum += numbers[i];
}
也许 action (array[i])
把你绊倒了。了解这是对数组中的元素 调用 操作,因此更直观地说它看起来像 action(array[i])
。
对于 foreach
,此调用在代码内部处理 -- 在 action (array[i])
。这就是为什么您可以只传递一个函数而无需自己调用它的原因。
一句话,forEach
通过调用您提供的数组中每个元素的函数来工作。
如果您需要另一个例子来解决这个问题,请考虑这个(假设 forEach
是您问题中的那个):
var greetings = ["Hello", "Hi", "How are ya"];
function printGreeting(greeting){
console.log(greeting, "Greg");
}
forEach(greetings, printGreeting);
正如您在此处看到的,printGreeting
通过传递 greetings[i]
的每个值来调用 greetings
中的所有元素。
任何你想在数组上用 for 循环做的事情都可以使用 forEach
循环来完成,也许更容易。
有关详细信息,请在此处查看标准 Array.prototype.forEach()
:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
我不知道这是怎么回事。这是代码。
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);
我知道 sum =+ number;
正在传递给 forEach
并循环遍历数组编号。但我无法弄清楚这是如何发生的细节。像这样 function(number) {sum =+ number}
代替 action
for (var i = 0; i < [1, 2, 3, 4, 5].length; i++)
function(number) {
sum += number;
} (array[i]);
}
没有意义,运行也没有。什么是
var numbers = [1, 2, 3, 4, 5], sum = 0;
for (var i = 0; i < numbers.length; i++)
sum += (numbers[i]);
debug(sum);
console.log(sum);
这是我可以压缩并使其工作的最大数量。但是你怎么到这里呢?换句话说,到底发生了什么?
感谢您的帮助。这个概念似乎是 Haverbeke 方法的基础,所以我想我最好理解它。
正确的翻译,正如@FelixKling 所说的那样(即使他没有),效果很好:
var array = numbers;
var action = function(number) {
sum += number;
}
for (var i = 0; i < array.length; i++) {
action(array[i]);
}
forEach
函数正在为数组中的每个元素调用 action
。
所有 forEach
在这里所做的就是抽象出一个循环,就像您几乎拥有的循环一样:
for (var i = 0; i < numbers.length; i++){
sum += numbers[i];
}
也许 action (array[i])
把你绊倒了。了解这是对数组中的元素 调用 操作,因此更直观地说它看起来像 action(array[i])
。
对于 foreach
,此调用在代码内部处理 -- 在 action (array[i])
。这就是为什么您可以只传递一个函数而无需自己调用它的原因。
一句话,forEach
通过调用您提供的数组中每个元素的函数来工作。
如果您需要另一个例子来解决这个问题,请考虑这个(假设 forEach
是您问题中的那个):
var greetings = ["Hello", "Hi", "How are ya"];
function printGreeting(greeting){
console.log(greeting, "Greg");
}
forEach(greetings, printGreeting);
正如您在此处看到的,printGreeting
通过传递 greetings[i]
的每个值来调用 greetings
中的所有元素。
任何你想在数组上用 for 循环做的事情都可以使用 forEach
循环来完成,也许更容易。
有关详细信息,请在此处查看标准 Array.prototype.forEach()
:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach