Não entendo a função forEach
Pessoal, estou estudando JavaScript sozinho já faz algum tempo. Estudo pelo livro JavaScript Eloquent e estava tudo legal até chegar na parte de funções de ordem superior. Cheguei em uma parte que criamos uma função como parâmetro de outra função. Vou coloca-la aqui:
var numbers = [1, 2, 3, 4, 5], sum = 0;
forEach(numbers, function(number) {
sum += number;
});
console.log(sum);
E o resultado disso é 15.
Não consigo entender essa função. forEach não é chamada em lugar algum. o que chamamos no console.log é o sum, que é uma variável de valor 0. No livro o resultado disso é 15. no entanto quando coloco o mesmo código para rodar no scratchpad, ele diz:
/*
Exception: ReferenceError: forEach is not defined
@Scratchpad/2:2:1
*/
Não sei o que eu faço. Já pesquisei por forEach, mas não entendi por que esse código não está dando o resultado sendo que no livro diz que é 15. Não sei se o autor do livro errou ou se eu que sou louco. Por favor me ajudem. Obrigado desde já. Colocarei um pouco do conteúdo do livro explicando esse código. Link do livro: [https://github.com/braziljs/eloquente-javascript/blob/master/chapters/05-funcoes-de-ordem-superior.md](https://github.com/braziljs/eloquente-javascript/blob/master/chapters/05-funcoes-de-ordem-superior.md) O conteúdo está logo no inicio.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Normalmente você não irá passar uma função predefinida para o forEach, mas ela será criada localmente dentro da função.
var numbers = [1, 2, 3, 4, 5], sum = 0;
forEach(numbers, function(number) {
sum += number;
});
console.log(sum);
// → 15
Isso parece muito com um loop clássico, com o seu corpo escrito como um bloco logo abaixo. No entanto o corpo está dentro do valor da função, bem como esta dentro dos parênteses da chamada de forEach. É por isso que precisamos fechar com chave e parêntese.
Nesse padrão, podemos simplificar o nome da variável (number) pelo elemento atual, ao invés de simplesmente ter que buscá-lo fora do array manualmente.
De fato, não precisamos definir um método forEach. Ele esta disponível como um método padrão em arrays. Quando um array é fornecido para o método agir sobre ele, o forEach espera apenas um argumento obrigatório: a função a ser executada para cada elemento.
Discussão (2)
Carregando comentários...