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.