Llamada por Valor: Supongamos que hay una variable llamada “a” . Ahora, almacenamos un valor primitivo (booleano, entero, flotante, etc.) en la variable «a» .
Almacenemos un valor entero en «a» , sea a=5. Ahora la variable «a» almacena 5 y tiene una ubicación de dirección donde ese valor primitivo se encuentra en la memoria.
Ahora, supongamos que copiamos el valor de “a” en “b” por asignación ( a=b ). Ahora, «b» apunta a una nueva ubicación en la memoria, que contiene los mismos datos que la variable «a» .
Por lo tanto, a=b=5 pero ambos apuntan a ubicaciones separadas en la memoria.
Este enfoque se llama llamada por valor donde 2 variables se vuelven iguales copiando el valor pero en 2 puntos separados en la memoria.
Características de la llamada por valor:
- Los argumentos de función siempre se pasan por valor.
- Copia el valor de una variable pasada en una función a una variable local.
- Ambas variables ocupan ubicaciones separadas en la memoria. Así, si se realizan cambios en una determinada variable no afecta a la otra.
Ejemplo:
JavaScript
<script type="text/javascript"> // By value (primitives) var a = 5; var b; b = a; a = 3; console.log(a); console.log(b); </script>
Salida: «b» era solo una copia de «a» . Tiene su propio espacio en la memoria. Cuando cambiamos «a» no tiene ningún impacto en el valor de «b» .
Llamada por referencia: Digamos que tenemos un objeto almacenado en la variable “a” . La variable almacena la ubicación o la dirección donde vive el objeto. Ahora hacemos b=a . Ahora esa nueva variable «b» en lugar de apuntar a una nueva ubicación en la memoria, apunta a la misma ubicación donde lo hace «a» . No se crea ningún objeto nuevo, no se crea ninguna copia. Ambas variables apuntan al mismo objeto. Esto es como tener 2 nombres.
Esta es una llamada por referencia . Se comporta de forma muy diferente a por valor. Todos los objetos interactúan por referencia.
Características de Por referencia:
- En JavaScript, todos los objetos interactúan por referencia.
- Si un objeto se almacena en una variable y esa variable se hace igual a otra variable, ambos ocupan la misma ubicación en la memoria.
- Los cambios en una variable de objeto afectan a la otra variable de objeto.
Ejemplo: aquí, cuando configuramos d=c , «d» apunta a la misma ubicación en la memoria donde lo hace «c» . Al principio, tenemos un par nombre-valor almacenado en “c” . Ahora, cuando cambiamos una propiedad usando «c» , también cambia la propiedad en «d» porque ambas apuntan al mismo objeto. Cambios en uno que afecta.
Javascript
<script> // By reference (all objects (including functions)) var c = { greeting : 'Welcome' }; var d; d = c; // Mutating the value of c c.greeting = 'Welcome to geeksforgeeks'; console.log(c); console.log(d); </script>
Producción:
Diferencia entre llamada por valor y llamada por referencia:
Llamar por valor |
Llamar por referencia |
La variable original no se modifica con los cambios en otras variables. | La variable original se modifica con los cambios en otras variables. |
Las variables reales y copiadas se crearán en diferentes ubicaciones de memoria. | Las variables reales y copiadas se crean en la misma ubicación de memoria. |
Al pasar variables en una función, cualquier cambio realizado en la variable pasada no afectará a la original. | Al pasar variables en una función, cualquier cambio realizado en el parámetro pasado también actualizará la referencia de la variable original. |
Publicación traducida automáticamente
Artículo escrito por madhumanti_gupta y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA