Explicación detallada del concepto de cierre de JS

Comprensión de cierre

1.   ¿Cómo generar cierres?

   * Cuando una función interna ( secundaria ) anidada se refiere a una variable ( función ) de una función externa ( primaria ) anidada , se genera un cierre

2.   ¿Qué es un cierre?

   * Use la depuración de Chrome para ver

   * Comprensión 1: los cierres son funciones internas anidadas (la mayoría de las personas )

   * Comprensión II: contiene la variable de referencia ( función ) objetos ( un puñado de personas )

   * Nota: Existen cierres en funciones internas anidadas

3. ¿Cuáles   son las condiciones para el cierre?

   * Anidamiento de funciones

   * Las funciones internas se refieren a datos de funciones externas ( variables / funciones )

   * Definición de la función de ejecución ( como cuando se ejecuta una función externa )

(Definición de la función de ejecución tendrá el cierre, sin llamar a la función interna, producirá cuando se llama a una función externa tratada previamente contexto de ejecución en bruto, a continuación, se puede realizar una función definida en el interior)

Este tipo de definición de función ya genera un cierre en la línea 22.

 

Si la definición de la función se asigna a una variable, no se puede generar un cierre en la línea 22, porque fn2 se promocionará como una variable durante el preprocesamiento, el valor no está definido y la definición de la función no se ejecuta. No hay cierre.

El objeto de función declarado de esta manera no generará un cierre hasta que se ejecute toda la definición de función en la línea 26 .

 

Cierres comunes

1. Use la función como el valor de retorno de otra función

2. Pase la función como argumento a otra llamada de función

 

Vea cuántas veces se crea la función interna y cuántas veces se ejecuta la función externa.

 

Durante la ejecución repetida de funciones internas, ¿por qué no desapareció el cierre?

 Si no hay cierre, a desaparecerá después de ejecutar var f = fn1 () , y la siguiente f () no puede transferir a desde fn1 .

 

Mensaje en cierre , no hay tiempo

 

El papel de los cierres.

1. variables dentro de una función de la función se ha completado, sigue vivo en la memoria ( variable local en bruto prolongado ciclo de vida )

2. Hacer datos ( variables / funciones ) que puedan ser manipulados ( leídos y escritos ) fuera de la función en la función

 

El problema:

1. Después de ejecutar la función, ¿la variable local declarada dentro de la función todavía existe?

Generalmente no existe, las variables que existen en el cierre pueden existir.

( "Posible" significa: el objeto de función donde se encuentra el cierre no se convierte en un objeto basura )

 

Es lógico, la función se completa dentro de las propiedades se dará a conocer, pero si la función es una función interna del objeto a través de la función externa en el retorno de forma asignado a una variable global,

A continuación, este objeto función se mantiene con vida, mientras que la variable local y su bolsa de cierre asociado sobrevivirán.

 

2. ¿Se puede acceder directamente a las variables locales dentro de la función fuera de la función?

No puedo Pero podemos dejar que opere externamente a través de cierres.

( "Para hacer una operación externa por el cierre" significa: una función anidada función interna, dentro de esta función para escribir un objeto similar en un ++ Tales modificaciones pueden ser una función de la operación de la variable interna,

Luego asigne este objeto de función interna a la variable global externa, puede manipular la variable local dentro de la función externamente)

 

El ciclo de vida de los cierres.

1. Generación: se produce cuando se ejecuta la definición de función interna anidada (no en la llamada)

2. Muerte: cuando la función interna anidada se convierte en un objeto basura

 

Muerte de cierre (los objetos de función que contienen cierres se convierten en objetos basura)

f = nulo

 

Cierre de aplicaciones _ encargo JS módulo

* Archivos Js con funciones específicas

* Encapsula todos los datos y funciones dentro de una función (privado)

* Solo exponer un objeto o método que contenga n métodos

* Los usuarios del módulo solo necesitan llamar a métodos a través de los objetos expuestos por el módulo para lograr las funciones correspondientes

El primero

 

 

 

El segundo

 

 Esto se puede llamar directamente, lo cual es más conveniente que el primero.

 

Además, los detalles al comprimir el código, los paréntesis en la parte superior e inferior se escriben como ventana .

Puede comprimir todas las ventanas a w .

 

Las desventajas y soluciones de los cierres.

1. Desventajas

* Después de ejecutar la función, las variables locales en la función no se liberan y el tiempo de memoria se alargará

* Fácil de causar pérdida de memoria

2. Resolver

* Se puede usar sin cierres

* Lanzamiento oportuno

f = nulo // Permitir que las funciones internas se conviertan en objetos basura- > recuperar cierres

 

Desbordamiento de memoria y pérdida de memoria

1. Desbordamiento de memoria

* Un error que ocurre cuando se ejecuta un programa

* Cuando la memoria requerida por el programa para ejecutarse excede la memoria restante, se genera un error de desbordamiento de memoria

2. Pérdida de memoria

* La memoria ocupada no se libera a tiempo

* La acumulación excesiva de pérdidas de memoria conduce al desbordamiento de la memoria.

* Fugas de memoria de uso común:

 * Variable global inesperada (variable definida sin var en la función )

 * Temporizadores o funciones de devolución de llamada que no se limpian a tiempo (no limpiar después de iniciar el temporizador de bucle)

 * Cierres (sin f = nulo activo para hacer que los objetos de función incrustados sean basura, los cierres siempre existirán)

Supongo que te gusta

Origin www.cnblogs.com/fzgt/p/12761499.html
Recomendado
Clasificación