Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
Poxa, realmente. Quando você falou é que veio cair a fixa. tinha sim uma função anterior declarando a forEach, eu é que não estava ligando os pontos. Ficando assim:
function forEach(array, action) {
for (var i = 0; i < array.length; i++)
action(array*);*
*
}*
*
var numbers = [1, 2, 3, 4, 5], sum = 0;*
*
forEach(numbers, function(number) {sum += number;});*
*
console.log(sum);
*
*
**
*
*
**
Muito obrigado por me ajudar. Fica ai com a melhor resposta!
*
Essa função forEach não é nativa. Ela deve ter sido declarada em algum lugar do livro.