Paso por valor o por referencia
Pequeña referencia que me ayuda cuando cambio con frecuencia de lenguaje.
Lenguaje | Paso dew argumentos | Operador "referencia" | Operador "de-referencia" |
---|---|---|---|
C/C++ | Por valor | & | * |
Perl | Por valor | \ | $ |
Java | Por referencia | - | - |
Javascript | Por referencia | - | - |
Ruby | Por referencia | - | - |
Mas detalles del paso por-referencia
Para ser exactos, cuando decimos "Por referencia", lo que ocurre en realidad es que se pasa por valor la referencia a un objeto.
Dicho de otro modo si yo tengo la variable a
y la paso a la funcion f(param)
, dentro de f
lo que tengo en param
es una copia del puntero al contenido de a
.
Por tanto, dentro de f
, cuando cambio el contenido de param
los efectos se verán fuera de la función. Pero si cambio el valor de param
mismo, el cambio no se ve fuera de f
ya que param
era una copia de a
.
Ejemplo de lo anterior:
function f(param) { param.p = "2"; var b = {}; b.p = "3"; param = b; } var a = {}; a.p = "1"; f(a);
La función f
puede cambiar el contenido apuntado por a
. Pero nunca a
en si, porque yo manejo a
que es una copia por valor de a
. Por tanto, al final de este programa a.p
valdrá 2, no 3.