2
respostas

Por que é necessário atribuir valor para lista/segredos, se a função já retorna o "valor" da lista completa?

<meta charset="utf-8">

<input/>
<button>Adivinhe pelo menos um número da minha lista</button>

<script>

    function sorteia() {

        return Math.round(Math.random() * 10);
    }


    function preencheLista(tamanhoArray) {

        var lista = [];
        var contador = 1

        while(contador <= tamanhoArray) {

            var numeroAleatorio = sorteia();
            var jaExiste = false;

            for(var posicao = 0; posicao < lista.length; posicao++) {
                if(lista[posicao] == numeroAleatorio) {

                    jaExiste = true;
                    break;
                }

            }

            if (jaExiste == false) {

                lista.push(numeroAleatorio);
                contador++;
            }
        }

        return lista;

    }


    lista = preencheLista(5);

    console.log(lista);

</script>

Estou fazendo por partes e testando, fiz a função que gera o número aleatório e a função que preenche o array "lista" com esses números. Quando eu verificava no console, lista aparecia como undefined. Atribuí o retorno da função preencheLista ao array lista, e fluiu. Mas não entendo. Por que é necessário atribuir valor para lista, se a função já retorna o "valor" da lista completa?

2 respostas

Oi Fêrnande, tudo bem?

Acredito que o "return" seja necessário para que você consiga associar os valores gerados pela função "preencheLista" à "lista".

Sem o comando "return" é como se a função fosse executada, os números fossem gerados, o array "lista" de dentro da função fosse preenchido, mas no fim não tivesse onde expressar esses valores. E daí quando o código passa novamente pela informação

lista = preencheLista (5)

ele faz a função toda de novo, sem nunca retornar um valor "lista", te dando a mensagem de "undefined".

Com o comando "return", a função é executada, os números são gerados, o array lista dentro da função é preenchido e, no fim, retona o novo valor de "lista", substituindo a instrução inicial de chamar a função "preencheLista" pelo resultado dela. Sendo assim, após a execução da função, seu código terá a seguinte informação:

lista = [n1,n2,n3,n4,n5]

com n1 até n5 sendo os números gerados pela função "preencheLista".

Acho que é isso. Deu pra entender? Também comecei o curso há pouco tempo, então talvez tenha sido prolixo ou confundido algum termo, já peço desculpa de antemão !

Espero ter ajudado, um abraço e bons estudos! (:

Vlw pela resposta! Minha questão não é o return, é o pq de ter que fazer isso "lista = preencheLista (5)" depois, e não simplesmente chamar a função assim "preencheLista (5)". Pensei que o return já garantiria o preenchimento do arranjo "lista".