English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La transmisión por valor (call by value) es la estrategia de evaluación más común: los parámetros formales son copias de los argumentos que se transmiten al llamar. La modificación del valor del parámetro no afectará al argumento.
Al transmitir por referencia (call by reference), los parámetros formales de la función reciben una referencia implícita de los argumentos, en lugar de una copia. Esto significa que si se modifica el valor del parámetro formal, también se modificará el argumento. Ambos apuntan al mismo valor.
La transmisión por referencia hace que el seguimiento de las llamadas a la función sea más difícil y a veces también puede causar algunos bugs sutiles.
La transmisión por valor, debido a que cada vez se necesita clonar una copia, es menos eficiente para algunos tipos complejos. Ambos métodos de transmisión tienen sus propios problemas.
Los tipos básicos de JS, se transmiten por valor.
var a = 1; function foo(x) { x = 2; } foo(a); console.log(a); // aún es1, sin x = 2Asignación afectada
Vamos a ver la transmisión de objetos:}
var obj = {x : 1}; function foo(o) { o.x = 3; } foo(obj); console.log(obj.x); // 3, se modificó! var obj = {x : 1}; function foo(o) { o = 100; } foo(obj); console.log(obj.x); // es1, obj no se modificó como100.
Se puede ver que la transmisión de valores de objetos no es la transmisión por referencia. De hecho, la transmisión compartida (call by sharing), más exactamente, los tipos básicos de JS se transmiten por valor, y los tipos de objetos se transmiten por compartido (call by sharing, también llamada transmisión por objeto, transmisión compartida por objeto).
El punto focal de esta estrategia es: al llamar a una función y pasarle un argumento de objeto, la función recibe una copia de la referencia del argumento de objeto (ni es una copia de objeto transmitida por valor, ni es una referencia implícita transmitida por referencia). Diferente de la transmisión por referencia, en la transmisión compartida, las asignaciones a los parámetros formales de la función no afectan el valor de los argumentos.
En resumen, los tipos básicos se transmiten por valor, mientras que para los objetos, se transmite la dirección a la que apunta el objeto, también se puede considerar como un tipo especial de transmisión por valor. Si se realizan operaciones en las propiedades del objeto dentro de la función, se realizan operaciones en las propiedades del objeto al que apunta. Sin embargo, si se realiza una operación en su conjunto (por ejemplo: o =) 100 o o = []), realmente es una nueva asignación de objeto, la dirección de referencia del argumento real es la dirección de referencia del nuevo objeto, sin relación alguna con la original, por lo que no afectará al objeto original.
Todo lo mencionado anteriormente es toda la información sobre si JS transmite por valor o por referencia (recomendado) que el editor le ha presentado a ustedes. Esperamos que esto les sea útil. Si tienen alguna pregunta, no dudes en dejarme un mensaje, el editor responderá a tiempo. ¡También agradecemos mucho el apoyo de todos a la página web de tutorial de grito!
Declaración: El contenido de este artículo se ha obtenido de la red, es propiedad del autor original, el contenido se ha contribuido y subido por los usuarios de Internet de manera autónoma. Este sitio no posee los derechos de propiedad, no ha sido editado por humanos y no asume responsabilidad alguna por las responsabilidades legales. Si encuentra contenido sospechoso de infracción de derechos de autor, le invitamos a enviar un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @ para denunciar y proporcione evidencia relevante. Una vez verificada, este sitio eliminará inmediatamente el contenido sospechoso de infracción de derechos de autor.)