Olá, segue o código do programa de Stefany corrigido:
// Quando passamos uma variável como argumento de uma função, esta é passada por referência e
// quando é executada, altera o valor original da variável que foi passada como argumento.
// Para que isso não aconteça, devemos criar uma nova variável objeto dentro da função
// e está terá as mesmas propriedades da variável original, que foi passada por referência,
// alterando, se preciso for, as propriedades da nova variável.
function calculaProximaIdade(idade) {
idade += 1;
console.log(idade+"\n");
}
function calculaProximasIdades(idades) { //altera o valor da variável passada como argumento
for (let i = 0; i < idades.length; i += 1) {
idades[i] += 1;
}
console.log(idades+"\n");
}
function calculaProximasIdades1(idades) { //NÃO altera o valor da variável passada como argumento
let lista = [];
for (let i = 0; i < idades.length; i += 1) {
lista[i] = idades[i] + 1;
}
console.log(lista+"\n");
}
function calculaIdadesDaqui5Anos(idades) { //altera o valor da variável passada como argumento
for (let i = 0; i < idades.length; i += 1) {
idades[i] += 5;
}
console.log(idades+"\n");
}
function calculaIdadesDaqui5Anos1(idades) { //NÃO altera o valor da variável passada como argumento
let lista = [];
for (let i = 0; i < idades.length; i += 1) {
lista[i] = idades[i] + 5;
}
console.log(lista+"\n");
}
// passagem por referência
console.log("<------------Passagem por referência: ------------>\n")
let idadeStefany = 21;
calculaProximaIdade(idadeStefany);
let idadesAmigos = [idadeStefany, 20, 23, 18, 7];
calculaProximasIdades(idadesAmigos);
console.log("Aqui a função anterior alterou os valores da lista original \n")
calculaIdadesDaqui5Anos(idadesAmigos);
console.log("<------------Passagem por valor: ------------>\n")
// passagem por valor
idadeStefany = 21;
calculaProximaIdade(idadeStefany);
idadesAmigos = [idadeStefany, 20, 23, 18, 7];
calculaProximasIdades1(idadesAmigos);
calculaIdadesDaqui5Anos1(idadesAmigos);