Avatar ·

JavaScript: ¿paso por valor o por referencia? Aclarando la confusión

¡Hola a todos! Soy nuevo en JavaScript y no logro entender cómo funciona realmente el paso de argumentos a funciones. En algunos artículos escriben que JS pasa todo por valor, en otros que los objetos se pasan por referencia. Escribí un código simple que me terminó de confundir. Aquí un ejemplo: ```javascript function changeValue(x) { x = 10; console.log('Dentro de la función:', x); } let a = 5; changeValue(a); console.log('Después de la función:', a); // 5 — todo claro, el número no cambió ``` Con esto está claro: el primitivo se pasa por valor. Pero cuando pruebo con un objeto: ```javascript function changeObject(obj) { obj.name = 'Nuevo nombre'; } let user = { name: 'Nombre antiguo' }; changeObject(user); console.log(user.name); // 'Nuevo nombre' — ¡el objeto cambió! ¿Entonces es por referencia? ``` Pero lo que más me desconcierta es este ejemplo: ```javascript function replaceObject(obj) { obj = { name: 'Un objeto completamente diferente' }; console.log('Dentro:', obj.name); ``` }