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);
```
}