Notas de estudio sobre cierres

Escribir al frente

  Finalmente llegué a la escuela y comencé a reconstruir los conceptos básicos de js. La primera parada es el cierre de un sueño ~ El gran artículo de Yu Yu me ayudó mucho, y terminé de leer un conjunto de iniciación. También comprende por qué no se recomienda considerar los cierres primero en escenarios de aplicación reales.
  De hecho, es solo un fenómeno informático, no es un misterio. El siguiente es el texto completo de js:

Esta combinación de un objeto de función y un alcance (un conjunto de vinculaciones de variables) en el que se resuelven las variables de la función se denomina cierre en la literatura informática.

  ¡Vea la última frase preposicional! the computer science literature!
  Nota : Este artículo es solo una comprensión personal visualizada y un resumen de los cierres. Para conocimientos lógicos y teóricos específicos, los camaradas aún necesitan encontrar el blog y el tomo del gran dios.

Conceptos para entender de antemano

  Antes de hablar de cierres, debemos comprender brevemente los conceptos de contexto de ejecución y cadena de alcance. Pon un mapa mental primero ~
Inserte la descripción de la imagen aquí

  consejos: personalmente entiendo que la relación entre esta palabra clave y el cierre no es muy estrecha, por lo que no la ampliaré aquí (en realidad, porque hay demasiadas secciones y no se puede cortar una imagen).
  Si tiene un Comprensión básica de la pila, luego comprenda el contexto de ejecución El mecanismo operativo es muy fácil. El contexto de ejecución, como su nombre lo indica, es que cuando el código js ejecuta un fragmento de código ejecutable, se crea el contexto de ejecución correspondiente. Tiene tres atributos importantes, a saber, objeto variable, cadena de alcance y esto. El método de análisis de contradicciones nos dice que captemos la contradicción principal, luego la contradicción principal del cierre es la cadena de alcance.
  Cuando busque una variable, primero busque el objeto variable del contexto actual, si no lo encuentra, buscará el objeto variable de su contexto de ejecución padre y buscará la posición global. Entonces este camino es la cadena de alcance, que puede entenderse como "grilletes", porque la existencia de esta cadena de alcance hace posible el cierre.


### Una pregunta clásica, una pregunta de 82 años
var scope = "global scope";
function checkscope(){
    
    
    var scope = "local scope";
    function f(){
    
    
        return scope;
    }
    return f;
}

var foo = checkscope();
foo();

  La respuesta se empuja directamente - local scope. Entonces la pregunta es, ¿por qué no es una variable global global scope?


Cierre causado por la cadena de alcance

  Aquí debemos mencionar el concepto de cierres de manera rutinaria: primero, un cierre todavía existe incluso si el contexto en el que fue creado ha sido destruido, el segundo se refiere a las variables libres de beber en el código. Entre ellas, las variables libres se refieren a variables que se utilizan en funciones, pero que no son parámetros de función ni variables locales de la función.
  De hecho, es muy fácil de entender. Tomando esta pregunta como ejemplo, encontramos que al acceder f, el checkscopecontexto se ha salido de la pila, lo que significa que local scopeya no debería existir, entonces, ¿por qué el resultado final sigue siendo ? De hecho, fla cadena de alcance ha habido una función checkscopeen la función local scope, fel orden global de la cadena de alcance checkscope- - f. Por lo tanto, incluso si se checkscopedestruye, el sistema lo retendrá automáticamente debido a los "grilletes" de esta cadena de alcance local scope. En este punto, cuando no fpodemos encontrar una scopevariable en la función , podemos encontrar su contexto padre en el camino, es decir checkscope, lo encontramos local scope, por lo que ya no necesitamos buscar su "abuelo" global global scope.
  Sin embargo, al describir este proceso, encontraremos un problema: ¿cómo sabe el sistema qué variable debe mantenerse en la memoria ?, ¿y si el número de tales variables alcanza un nivel considerable? Evidentemente, no demasiado optimista. El sistema no es un ser humano y no puede destruir de forma inteligente las variables a las que no es necesario acceder en los nodos secundarios. Por lo tanto, use los cierres con precaución, especialmente en escenarios de aplicación con grandes cantidades de datos ~

Link de referencia

Blog de Wei Yu:
contexto de ejecución
en profundidad de
JavaScript , pila de contexto de ejecución en profundidad de
JavaScript , cierre en profundidad de
JavaScript , cadena de alcance en profundidad de JavaScript , objeto variable en profundidad de JavaScript
Libro técnico: La
esencia del lenguaje JavaScript , la
guía definitiva a JavaScript

Supongo que te gusta

Origin blog.csdn.net/weixin_40807714/article/details/106461600
Recomendado
Clasificación