En JavaScript, todos los objetos se almacenan y se pasan 'por referencia'.
var a = { v: 'a' }, b = { v: 'b' };
a=b;
b.v='c';
a
y b
hará referencia al mismo objeto; a.v == 'c'
y b.v == 'c'
.
tipos de datos primitivos (string
, number
, boolean
, null
, y undefined
) son inmutables; ellos son pasados por valor.
var a = 'a', b = 'b';
a=b;
b='c';
Dado que estamos tratando con primitivas, a == 'b'
y b == 'c'
.
Pedantes le dirá que JavaScript no se pasan por referencia en un sentido clásico, o que es un lenguaje "puro pase por valor", pero creo que eso complica las cosas, a efectos prácticos. No, no puede modificar directamente un argumento pasado a una función como si fuera una variable (lo que sería cierto si el idioma fuera verdadero paso por referencia), pero tampoco recibe una copia de un objeto pasado como argumento (como lo haría si fuera true pass-by-value). Para la mayoría de los propósitos (desde el punto de vista del usuario del idioma, usted), los objetos pasados a una función son referencias, ya que puede modificar ese objeto y afecta el objeto de la persona que llama. Vea también el fantastic answers to this question.
Depende de su método de copia. Tienes que ser específico, ¿cómo copias tus valores? –
¿O quisiste decir el caso cuando un valor pasa como argumento en una función? –
En lugar de pasar por argumentos, estoy pensando en un simple 'var x, y; x = {'blah': 'foo'}; y = x; x = {'bar': 'bas'}; console.log (y); 'tipo de situaciones, pero si hay más matices para los tipos de copia que, por favor, hágame saber cómo puedo mejorar la pregunta. – buley