El cierre de las notas de estudio de JS, qué es un cierre, condiciones de generación de cierre, preguntas de cierre y análisis.

Cierre

Antes de hablar de cierres, primero comprendamos la función

  • Etapa de definición de función
    i. Abrir un espacio de almacenamiento en la memoria
    ii. Poner el código en el cuerpo de la función como una cadena exactamente igual en este espacio
    1. Todas las variables encontradas no se analizan
    iii. Asignar esta dirección de espacio a Nombre de función (nombre de variable)

  • Fase de llamada de función

    i. Encontrar el espacio de almacenamiento correspondiente de acuerdo con el nombre de la función (nombre de la variable)
    ii. Reabrir un espacio de ejecución de la función
    iii. Realizar la parametrización formal
    en este espacio de ejecución iv. Analizar previamente en este espacio de ejecución
    v. Almacenar el espacio de almacenamiento de la función Copie el código en el espacio de ejecución y ejecute
    vi. Una vez completada la ejecución, el espacio de ejecución abierto se destruye

  • Llamada de función
    i. Cada llamada de función abrirá un espacio de ejecución
    ii. Lo llamas una vez, abre un espacio de ejecución
    iii. El código se destruye
    iv. Cuando vuelves a llamar, abre un espacio de ejecución nuevamente
    v. El código se destruye después de la ejecución

Hablemos de bajo qué circunstancias no se destruirá el espacio de ejecución de la función

  • Un espacio de ejecución de función que no se destruirá
    i. Cuando se ejecuta una función, se abrirá un espacio de ejecución
    ii. Todos los códigos se ejecutan en este espacio de ejecución
    iii. Una vez completada la ejecución, el espacio de ejecución de la función se destruye

  • En un caso especial
    i. El espacio de ejecución de la función no se destruirá

  • ¿Cuál es la situación especial?
    I. Cuando la función devuelve un "tipo de datos complejos"
    ii. Y hay una variable fuera de la función que recibe un "tipo de datos complejos"
    iii. En este momento, el espacio de ejecución de la función no se destruirá

  • El espacio de ejecución de la función que no se destruirá
    i. ¿Cuándo se destruirá?
    Ii. Cuando la variable recibida externamente ya no haga referencia al valor de retorno de
    la función iii. El espacio de ejecución de la función se destruirá

Cierre

  • Hay tres condiciones necesarias para la generación de cierres (una es indispensable)
    1. Una función B se devuelve directa o indirectamente
    dentro de la función A 2. Una variable privada de función (datos privados) se usa dentro de la función B 3. Una variable
    fuera de la función A Reciba esta función B
    para que se forme un espacio funcional que no se destruirá

  • Espacio de cierre
    1. Llamamos al espacio de ejecución de la función A que no se destruirá como espacio de cierre
    2. Llamamos a la función B devuelta en la función A la función de cierre de la función A
    3. La definición oficial de la última oración: Cierre ==> función dentro de la función

  • Las características de los cierres (las ventajas y desventajas son paralelas)
    1. Extender el ciclo de vida de las variables.
    Ventajas: Debido a que el espacio de ejecución no se destruye, las variables no se destruyen.
    Desventajas: Debido a que el espacio de ejecución no se destruye, siempre existirá en la memoria
    2. Puede acceder a la función interna Las
    ventajas de las variables privadas : utilizar la función de cierre para acceder a las variables privadas dentro de la función
    Desventajas: el espacio de ejecución no se destruirá, siempre existirá en la memoria
    3. Proteger las variables privadas (siempre que la función tenga esta característica)
    Ventajas: proteger las variables privadas
    Desventaja de acceso externo : si desea acceder, debe utilizar la función de cierre

  • Las deficiencias de la función de cierre son "fatales"
    1. Porque cuando hay algo en un espacio de memoria que no se destruirá,
    siempre habrá uso de memoria, si es demasiado, causará desbordamiento de memoria
    3. Entonces el resultado es memoria Ceda el paso

  • Cuándo usar cierres
    1. Cuando necesita extender el ciclo de vida de las variables
    2. O cuando necesita acceder a variables privadas dentro de una función determinada

Tema de cierre

function fn(i){
    
    
        return function(n){
    
    
            console.log(n + (--i))
        }
    }
  
    var f = fn(2)
    f(3)
    fn(4)(5)
    fn(6)(7)
    f(8)

Análisis: Aquí sigo el método de dibujo para analizar esto es más intuitivo y más fácil de entender:
Analizando

function fn(i){
    
    
       return function(n){
    
    
           console.log(n + (i++))
       }
   }

   var f = fn(10)
   f(20)
   fn(20)(40)
   fn(30)(50)
   f(30)

Analizando

Supongo que te gusta

Origin blog.csdn.net/Bob_Yan623/article/details/108836860
Recomendado
Clasificación