1. El espacio de memoria en JS se divide en dos tipos: memoria de pila y memoria de montón
Memoria de pila: proporciona un entorno para la ejecución del código JS; almacena los valores de los tipos de datos básicos; -> El alcance global o el alcance privado son en realidad la memoria de la pila
Memoria del montón: almacena el valor del tipo de datos de referencia (el objeto almacena el nombre del atributo y el valor del atributo en él, y la función almacena el código en el cuerpo de la función como una cadena)
2. Cuando el navegador carga nuestra página HTML, primero proporcionará un entorno para la ejecución del código JS -> Alcance global (global-> ventana)
3. Antes de que se ejecute el código JS, el navegador debe hacer algunas cosas por sí solo: declarar o definir todas las palabras clave var/funciones por adelantado -> "preexplantación" (sonido variable)
Declarar -> dígale al navegador que tengo tal cosa, como var num1; función fn;
Definido -> asignar valor a la variable o función declarada, por ejemplo num1 = 12; fn = function () {}
[IMPORTANTE] Las variables solo declaran que no están definidas, el valor predeterminado está indefinido (indefinido)
4. El procesamiento de VAR y la función es diferente en la etapa previa a la interpretación.
VAR -> Cuando se realiza la previa explicación, la variable se declara de antemano. La operación de asignación se completará solo cuando se ejecute el código.
Función -> Durante la previa explicación, todas las declaraciones y definiciones se completará con anticipación (cuando el código se ejecute, se omitirá directamente)
[IMPORTANTE] Al principio, solo se realizan preinterpretaciones en la ventana. Las cadenas actuales almacenadas en la función FN son todas las cadenas, por lo que el total de VAR no tiene un significado práctico, por lo que no se realizan las preinterpretaciones-> "Las preinterpretaciones se producen en el alcance actual"
console.log (obj); //-> Undefined var obj = {nombre: "Zhang Shanshan", edad: 10}; función fn (num1, num2) {// omita directamente cuando el código se ejecute a esta línea, porque durante la explicación previa hemos completado la declaración y definición var en total = num1 + num2; console.log (total); } var num1 = 12; fn (num1, 100); // ejecutar fn, asignar el valor de la variable global num1 al parámetro num1 y asignar 100 al parámetro num25. La variable declarada bajo el alcance global es una variable global
Las variables declaradas en el alcance privado son variables privadas; Los parámetros formales de la función también son variables privadas;
¿Cómo saber si las variables que aparecen en una función son privadas o globales?
Primero, vea si es un parámetro formal y luego vea si se ha declarado en el alcance privado (ha variado). Uno de los dos es una variable privada. Entonces, no importa dónde aparezca en la función actual, es privado, y no existe una relación entre él y la global; Si tampoco es así, significa que no es privado, entonces busque el alcance anterior ...
6. Cuando se ejecuta la función, se formará un nuevo alcance privado (memoria de pila) para que el código de la función en el cuerpo de la función ejecute;
1) Asignar valor a parámetros formales
2) Pre-interpretación bajo alcance privado
3) Ejecución de código bajo alcance privado
El nuevo alcance privado formado también protege las variables privadas dentro de las influencias externas. Ponemos este mecanismo de protección de la función -> "Cierre
Diferencia: aquellos con VAR se pueden declarar antes de ejecutar el código, mientras que aquellos sin VAR no se pueden declarar de antemano
1. Se requiere una preexplicación independientemente de si las condiciones son verdaderas o no.
Ventana Preexplicación: Var A; -> Window.a; if (! ("a" en la ventana)) {// "A" en la ventana -> verdadero var a = "us"; } console.log (a); //-> indefinido2. Pre-interpretación solo ocurre en el lado izquierdo de "=", solo el lado izquierdo es preinterpretación y el lado derecho es el valor sin preinterpretación.
Expresión de la función de las funciones anónimas: asigne la parte de la definición de función como un valor a un evento que es una variable o elemento.
Cuando se explica previamente: var fn; -> El valor predeterminado de FN no está definido
fn (); //-> undefined () no capturado typeError: fn no es una función que solo las funciones se pueden ejecutar en js && Si se informa el código anterior js, el código a continuación no se ejecuta sin ningún procesamiento especial var fn = function () {console.log ("ok"); }; fn (); Cuando se explica previamente: fn = xxxfff000 fn (); //-> "ok" function fn () {console.log ("ok"); } fn (); //-> "Ok" función fn () {console.log ("ok"); } fn (); //-> "OK"3. El código debajo de la devolución en el cuerpo de la función ya no se ejecuta, pero el siguiente código debe participar en la previa explicación; Y las cosas detrás del retorno deben procesarse, pero como se devuelve como un valor, no se realiza la preexplicación;
VAR Total = 300; función fn () {console.log (total); Función de retorno sum () {}; // return es devolver el valor en la función al exterior de la función, que devuelve la dirección de memoria correspondiente a la función al exterior de la función, por ejemplo: return xxxfff111; El siguiente código de retorno en la función no está ejecutando var en total = 10; } fn ();4. La función de la función anónima no está previamente explicada bajo el alcance global.
La función auto-ejecutora de la función anónima: la definición y la ejecución se completan juntos
(función (num) {}) (100);
5. Cuando la previa explicación, si el nombre se repite, solo se declarará una vez y no se repetirá, pero la asignación aún se repetirá.
Si el nombre de una variable y el nombre de una función son los mismos que el nombre de una función en JS, se considera que se repite
Preexplicación:
var fn; declarar fn = xxxfff000; [Declaración] no + defina fn = xxxfff111; [Declaración] No + definición -> fn = xxxfff111 var fn = 12; // window.fn = 12 function fn () {//window.fn=function () {}} function fn () {}Lo anterior son todas las entendimientos relevantes sobre la preexplicación de JS que le ofrece el editor. Espero que apoyes a Wulin.com más ~