Olá, tudo bem ? No problema de cálculo da idade, o foco da questão é entender a integridade dos do programa, voltemos para o código:
function calculaProximaIdade(idade) {
idade += 1;
console.log(idade);
}
function calculaProximasIdades(idades) {
for (let i = 0; i < idades.length; i += 1) {
idades[i] += 1;
}
console.log(idades);
}
function calculaIdadesDaqui5Anos(idades) {
for (let i = 0; i < idades.length; i += 1) {
idades[i] += 5;
}
console.log(idades);
}
const idadeStefany = 21;
calculaProximaIdade(idadeStefany);
const idadesAmigos = [idadeStefany, 20, 23, 18, 7];
calculaProximasIdades(idadesAmigos);
calculaIdadesDaqui5Anos(idadesAmigos);
O principal problema desse script é justamente ao chamar a função calculaProximasIdades(idadeAmigos), pois nessa chamada está sendo passada uma lista, como parâmetro. Dentro dessa função, será realizado um incremento de uma unidade em cada valor da lista.
E é aí onde está o problema, quando essa rotina for concluída, os valores da contidos na listas serão alterados, pois eles foram passados por referência, como vimos na aula.
Quando for chamada a última função calcularIdadesDaqui5Anos(idadesAmigos), os valores da lista idadesAmigos, não serão mais os mesmos, pois foi alterados na chamada da função anterior. Dessa forma a idade calculada para 5 anos será errada.
Uma das possibilidades para resolver esse problema seria passar como parâmetro a cópia da lista idadeAmigos, da seguinte forma:
calculaProximasIdades(idadesAmigos.slice());
Espero ter ajudado.