var obj1 = { value: 1 }
var obj2 = { value: 2 }
function change(a, b) {
a = b;
}
change(obj1, obj2)
console.log(obj1);
¿Qué debería mostrar ese console.log?
* Pregunta de entrevista que suele fallar un número gigante de entrevistados.
var obj1 = { value: 1 }
var obj2 = { value: 2 }
function change(a, b) {
a = b;
}
change(obj1, obj2)
console.log(obj1);
¿Qué debería mostrar ese console.log?
* Pregunta de entrevista que suele fallar un número gigante de entrevistados.
diría que debería devolver {value:1} no? y supongo que la mayoría responde que es value:2 pero ese sería el valor de a y no de obj1.
#4 Correcto. Supongo que es una pregunta trampa por aquello de que los objetos van por referencia.
Si en vez de hacer a = b haces a.newValue = 2, el console.log te pintará { value: 1, newValue: 2 }.
Vamos, que en un caso a != obj1 y en otro a == obj1.
No termino de captar como se pasan en JS objetos como parametros, pero quiero entender que para que el console salga un {value:2} la función debería ser a.value=b.value;
¿ejecución asíncrona dando por culo?
Sí, el resultado es: Object { value: 1 }
Si metes el console log dentro de la función sí da el value: 2.
Pues te diría que tendría que ser {value:2}, en teoria ahora apuntarian los dos a la misma referencia, ¿No?
Pero ya he visto que el resultado es {value:1} xD. ¿Es por el scope de las funciones en JS?
En js siempre van por referencia los objetos, pero estáis confundidos pensando que ‘a’ es ‘obj1’ cuando son dos variables independientes que referencian al mismo objeto
Estas modificando ‘a’, no el valor del objeto que referencia ‘a’
Tenéis que quedaros en que a !== obj1 y a.value === obj1.value
Cuando modificas ‘a’ en si misma, haciendo que apunte a ‘b’ no estas modificando obj1
No se supone que pasas un apuntador de los obj cuando llamas la función? Entonces a y b sólo existen dentro de la función.
#21 A riesgo de pillarme los dedos, esto pasa en muchos lenguajes, luego lo confirmo.
Alfinal hay que ver una referencia como un int con un valor numérico que hace referencia a una dirección de memoria, si tu modificas este valor numerico, en este caso por el valor de la direccion de ‘b’, no modificas per se el contenido de esa dirección de memoria, ni por asomo el valor numerico del puntero obj1
PD: confirmo que esto pasa igual en Java
#22 Mi problema está en que en C por ejemplo, tu eres consciente en todo momento de si estás trabajando con el puntero o con el contenido referenciado por él. Aquí lo veo mucho más difuso, quizá es falta de práctica, nu ze
Que la gente siga diciendo que en Java existe paso de parámetros por referencia me hace morir por dentro.
Me das el código y estamos usando una web...
Las pregntas de mierda para entrevistas mejor dejarlas en las entrevistas.
pdt: no se como se puede fallar en una mierda así
La pregunta esta chula la verdad, hay que tener siempre ojo con referenciar a los objetos y se agradecería más preguntas como estas diarías por aprender pequeños detalles, en todo caso no entiendo lo de #2. A mi me resulta mucho más cómodo leerlo/entenderlo que el espageti de php.
#28 No sé macho, pero justo este ejercicio en PHP se escribe igual cambiando console.log() por print()