- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道这是怎么回事。这是代码。
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 方法的基础,所以我想我最好理解它。
最佳答案
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
关于javascript - Eloquent JavaScript。抽象数组遍历。第二版。第 83 页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32274032/
我是一名优秀的程序员,十分优秀!