Pasar por valor y pasar por referencia en Javascript

En este artículo, hablaremos sobre Pass by value y Pass by Reference en JavaScript.  

Pasar por valor: en Pasar por valor, la función se llama pasando directamente el valor de la variable como argumento. Entonces, cualquier cambio realizado dentro de la función no afecta el valor original.

En Pasar por valor, los parámetros pasados ​​como argumentos crean su propia copia. Por lo tanto, cualquier cambio realizado dentro de la función se realiza en el valor copiado, no en el valor original.

Pongamos un ejemplo para entender mejor:

Javascript

function Passbyvalue(a, b) {
    let tmp;
    tmp = b;
    b = a;
    a = tmp;
    console.log(`Inside Pass by value 
        function -> a = ${a} b = ${b}`);
}
  
let a = 1;
let b = 2;
console.log(`Before calling Pass by value 
        Function -> a = ${a} b = ${b}`);
  
Passbyvalue(a, b);
  
console.log(`After calling Pass by value 
       Function -> a =${a} b = ${b}`);

Producción:

Before calling Pass by value Function -> a = 1 b = 2
Inside Pass by value function -> a = 2 b = 1
After calling Pass by value Function -> a =1 b = 2

Pasar por referencia: en Pasar por referencia, la función se llama pasando directamente la referencia/dirección de la variable como argumento. Entonces, cambiar el valor dentro de la función también cambia el valor original. En la array de JavaScript y el objeto sigue el paso por propiedad de referencia.

En Pass by reference, los parámetros pasados ​​como argumentos no crean su propia copia, se refieren al valor original, por lo que los cambios realizados dentro de la función afectan el valor original. 

Pongamos un ejemplo para entender mejor.

Javascript

function PassbyReference(obj) {
    let tmp = obj.a;
    obj.a = obj.b;
    obj.b = tmp;
  
    console.log(`Inside Pass By Reference 
        Function -> a = ${obj.a} b = ${obj.b}`);
}
  
let obj = {
    a: 10,
    b: 20
  
}
console.log(`Before calling Pass By Reference 
    Function -> a = ${obj.a} b = ${obj.b}`);
  
PassbyReference(obj)
  
console.log(`After calling Pass By Reference 
    Function -> a = ${obj.a} b = ${obj.b}`);

Producción:

Before calling Pass By Reference Function -> a = 10 b = 20
Inside Pass By Reference Function -> a = 20 b = 10
After calling Pass By Reference Function -> a = 20 b = 10

Nota: En Pass by Reference, estamos mutando el valor original. cuando pasamos un objeto como argumento y actualizamos la referencia de ese objeto en el contexto de la función, eso no afectará el valor del objeto. Pero si mutamos el objeto internamente, afectará al objeto.

Ejemplo 1: Actualización de la referencia del objeto en la función.

Javascript

function PassbyReference(obj) {
  
    // Changing the reference of the object
    obj = {
        a: 10,
        b: 20,
        c: "GEEKSFORGEEKS"
    }
    console.log(`Inside Pass by 
        Reference Function -> obj `);
          
    console.log(obj);
}
  
let obj = {
    a: 10,
    b: 20
  
}
console.log(`Updating the object reference -> `)
console.log(`Before calling Pass By 
        Reference Function -> obj`);
console.log(obj);
  
PassbyReference(obj)
console.log(`After calling Pass By 
        Reference Function -> obj`);
console.log(obj);

Producción:

Updating the object reference -> 
Before calling PassByReference Function -> obj
{a: 10, b: 20}
Inside PassbyReference Function -> obj 
{a: 10, b: 20, c: "GEEKSFORGEEKS"}
After calling PassByReference Function -> obj
{a: 10, b: 20}

Ejemplo 2: Mutando el Objeto original.

Javascript

function PassbyReference(obj) {
  
    // Mutating the origanal object 
    obj.c = "GEEKSFORGEEKS";
    console.log(`Inside Pass by
        Reference Function -> obj `);
    console.log(obj);
}
  
let obj = {
    a: 10,
    b: 20
  
}
console.log(`Mutating the origanal object -> `)
console.log(`Before calling Pass By
        Reference Function -> obj`);
console.log(obj);
  
PassbyReference(obj)
console.log(`After calling Pass By 
        Reference Function -> obj`);
console.log(obj);

Producción:

Mutating the origanal object -> 
Before calling PassByReference Function -> obj
{a: 10, b: 20}
Inside PassbyReference Function -> obj 
{a: 10, b: 20, c: "GEEKSFORGEEKS"}
After calling PassByReference Function -> obj
{a: 10, b: 20, c: "GEEKSFORGEEKS"}

Publicación traducida automáticamente

Artículo escrito por AStream26 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 *