4
respostas

Por que o nivel de aninhamento não volta sempre para 0?

Se na definição de parâmetros da função temos:

function mergeSort(array, nivelAninhamento = 0) {

por que é que quando a função é acessada dentro dela mesma, a partir da constparte1, o nivelAninhamento consegue manter seu valor de 1 e assim sucessivamente, ao invés de se redefinir para 0 ?

4 respostas

Boa noite Irata, tudo bem?

Então, eu não vi o código completo, mas na verdade o valor 0 é um valor padrão para o parâmetro nivelAninhamento. No caso, você poderia não digitar um valor na chamada da função e ele iria considerar o 0.

Por exemplo:


const array = [0, 1, 2, 3, 4];
mergeSort(array); // Você poderia chamar uma função sem digitar o segundo valor, e ele iria utilizar o 0

Mas se você digitar um valor, ele irá considerá-lo, ao invés do valor padrão:

const array = [0, 1, 2, 3, 4];
mergeSort(array, 1); // O valor de nivelAninhamento agora é 1

Sendo assim, se dentro da função ela é executada com um valor diferente de nivelAninhamento, é por isso que ele muda.

Oi! Mas e se eu definir um valor, como 1 que você colocou acima, essa função sempre que acessada não deveria redefinir o valor desse parâmetro para 1? Acho que talvez fique difícil compreender minha dúvida sem o código inteiro. Mas, basicamente, eu não estou conseguindo entender como é que mergeSort faz para ficar pulando os níveis de aninhamento.

=/

Eu peguei o código para poder te mostrar onde acontece o incremento no valor

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

A função é chamada de forma recursiva, se você reparar nas linhas 10 e 11, ela está sendo chamada novamente, o aumento do valor acontece ali, onde vemos que ele pega o nivelAninhamento atual e soma 1

Então se você inicia a chamada da função mergeSort com o valor padrão ( nivelAninhamento=0 ), ao chegar nas linhas 10 e 11, vamos executá-la novamente, somando nivelAninhameto + 1 = 0 + 1 = 1, nessa segunda execução, o nivelAninhamento já vai iniciar igual à 1, ao chegar nas linhas 10 e 11, ela vai somar de novo, nivelAninhameto + 1 = 1 + 1 = 2, e na terceira execução, o valor nivelAninhamento vai ser igual à 2, e assim por diante.

Pode crer. Eu entendi a ideia. Mas não tinha ficado claro pra mim que seria possível uma definição inicial de valor de parâmetro que pudesse passar cada volta sem que ela fosse novamente definida, como se fosse só um "start". Diferentemente de jogar nivelAninhamento = 1 logo abaixo e obter sempre 1 na tela..