En los conceptos tradicionales, se cree que las funciones de JavaScript pasan la aprobación de la referencia (también llamada aprobación del puntero), y algunas personas creen que tanto el valor de valor como el paso de referencia están disponibles. Entonces, ¿qué está pasando con el parámetro JS pasando? De hecho, la siguiente manifestación se puede usar en Java
Primero, obtengamos un tipo de entrega básico más simple:
función add (num) {num+= 10; return num;} num = 10; alerta (add (num)); aelrt (num); // Salida 20,10Para las salidas 20 y 10 aquí, de acuerdo con la explicación oficial de JS, se realiza una acción de copia cuando se pasan los parámetros de tipo básico, de modo que el NUM variable declarado externamente y el Num de parámetros de la función tienen exactamente el mismo valor, pero tienen direcciones de parámetros completamente diferentes. Nadie se conoce, y el marco de parámetro de función Num Bread aparece cuando la llamada de función regresa. Por lo tanto, cambiar el parámetro de la función num no tiene ningún efecto en las variables externas originales.
Veamos un tipo de referencia de objeto más complejo: Pase:
función setName (obj) {obj.name = "ted";} var obj = new Object (); setName (obj); alert (obj.name); // salida tedLa esencia del código anterior es: crear un objeto de objeto, asignar su referencia a OBJ (en C, es directamente una asignación de una dirección de memoria), y luego, al pasar los parámetros de la función, hice lo mismo que el método anterior, copié un marco de pila a OBJ del parámetro de función, y ambos tienen el mismo valor (puede ser entendido como la dirección del objeto), y luego cuando cambia el nombre de set, el valor del objeto de la variedad (se puede enterrar en entendimiento (se vió a la variable (se dice una variedad (se llamó la Casta de la variedad (se dice que se conoce (se vió a la variedad (se llamó la Casta de la Casta (se llamó la Casta de Clases (se llamó la Casta de Clases (Letear Clasife (Letear Class. Java), y después de completar el cambio, el marco de pila correspondiente al parámetro de función OBJ también debe aparecer.
Por lo tanto, la salida correspondiente es el valor del objeto del objeto después de cambiar
Entonces, algunos amigos pueden preguntar, ¿esto también se puede entender como un pase de referencia (pase de puntero)? No, estrictamente hablando, en idiomas similares a Java, no hay consejos. En Java, el proceso anterior se denomina proceso de análisis de referencia simbólica a referencia directa. En C, un puntero es un tipo con una longitud fija (2 bytes en la mayoría de los compiladores C), pero en Java Idiomas similares, las referencias también tienen sus propias propiedades y métodos, pero no puede acceder directamente y controlarlo, por lo que también es un objeto en un sentido. Este mecanismo también evita enormemente la fuga de memoria, y el término se llama mecanismo de acceso estructurado de memoria.
Para probar el punto anterior, el ejemplo anterior se modifica ligeramente:
función setName (obj) {obj.name = "ted"; obj = nuevo objeto (); obj.name = "Mary";} var obj = new Object (); setname (obj); alert (obj.name); // Salida TedLa única diferencia entre este ejemplo y el ejemplo anterior es que se asigna un nuevo objeto al parámetro de función OBJ, de modo que el parámetro de función OBJ y el parámetro OBJ de referencia original tienen valores y direcciones de memoria completamente diferentes.
El artículo anterior habla brevemente sobre si la aprobación de parámetros de la función JavaScript es el valor de valor o el paso de referencia es todo el contenido que he compartido con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.