El código 1 imprime "florencia"
let name = "florence"; function test (arr) { arr += " and the machine"; } test(name); console.log(name);Código 2 imprime "florencia y la máquina"
let name = ["florence"]; function test (arr) { arr[0] += " and the machine"; } test(name); console.log(name);Entiendo que los resultados son diferentes porque el Código 1 pasa por valor y el Código 2 pasa por referencia. Sólo estoy tratando de entender por qué.
Cuando pasa un objeto (matriz), se pasa la referencia al objeto, por lo que en su caso, arr apunta a name .
arr[0] sin embargo, ahora apunta al valor en name[0] , y name[0] se modifica en consecuencia.
Cambiar arr no tiene efecto global:
let name = ["florence"]; function test (arr) { arr[0] += " and the machine"; arr=[]; } test(name); document.write(name);