Llamada por valor Vs Llamada por referencia en JavaScript

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»

Por valor

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:

Por referencia

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *