El entorno de ejecución define otros datos que las variables o funciones tienen permiso para acceder y determina su comportamiento respectivo. Cada entorno de ejecución tiene un objeto variable asociado con él.
El entorno de ejecución global es el entorno de ejecución más periférico. Dependiendo del entorno de host en el que se encuentre la implementación de JavaScript, los objetos que representan el entorno de ejecución también son diferentes. En un navegador web, el entorno de ejecución global se considera un objeto de ventana. Por lo tanto, todas las variables y funciones globales se crean como propiedades y métodos de objetos de ventana.
Objeto variable: todas las variables y funciones definidas en el entorno se almacenan en este objeto.
Cadena de alcance: cuando el código se ejecuta en un entorno, se crea una cadena de alcance de objetos variables. El propósito de la cadena de alcance es garantizar el acceso ordenado a todas las variables y funciones que tienen permiso para acceder al entorno de ejecución. La parte delantera de la cadena de alcance siempre es un objeto variable en el entorno donde se encuentra el código actualmente ejecutado.
Objeto activo: el objeto activo solo contiene una variable al principio, es decir, el objeto de argumentos. El siguiente objeto variable en la cadena de alcance proviene del entorno de inclusión (externo), y el siguiente objeto variable proviene del siguiente entorno de inclusión. Esto continúa al entorno de ejecución global; Los objetos variables del entorno de ejecución global son siempre el último objeto en la cadena de alcance.
Analización de identificadores: el análisis del identificador es un proceso de búsqueda de identificadores uno por uno a lo largo de la cadena de alcance. El proceso de búsqueda siempre comienza desde la parte delantera de la cadena de alcance y luego regresa paso a paso hasta que se encuentra el identificador.
Código de muestra:
var color = "azul"; function changeColor () {if (color === "azul") {color = "rojo"; } else {color = "azul"; }} changeColor (); alerta ("color es ahora" + color);La cadena de alcance de la función Changecolor () contiene dos objetos: su propio objeto variable (que define objeto argumentos) y un objeto variable de variables globales. Se puede acceder al color variable dentro de la función porque se puede encontrar en esta cadena de alcance.
Además, las variables definidas en los ámbitos locales se pueden usar indistintamente con variables globales en un entorno local, ejemplo:
var color = "azul"; function changeColor () {var otherColor = "rojo"; function swapColors () {var tempcolor = otherColor; otro Color = color; color = tempcolor; // Puede acceder a color, otro Color y Tempcolor aquí} // Puede acceder a color y otro Color aquí, pero no puede acceder a Tempcolor SwapColors ();} // solo puede acceder a ColorChangeColor ();El código anterior implica 3 entornos de ejecución: el entorno global, el entorno de manejo de Changecolor () y el entorno local de SwapColors ().
Hay un color variable y una función Changecolor () en la variable global. La variable local de Changecolor () contiene una variable OTROCOLOR y una función de función SwapColor (), que puede acceder al color en la variable global. Existe una tempcolor variable en la variable local de swapcolors (). En SwapColors (), puede acceder al color en la variable global, o la variable de OtroColor, porque esos dos entornos son su entorno de ejecución principal. La cadena de alcance del ejemplo anterior es:
Entre ellos, el entorno interno puede acceder a todos los entornos externos a través de la cadena de alcance, pero el entorno externo no puede acceder a ninguna variación y funciones en el entorno interno . Las conexiones entre las variables de entorno son lineales y secuenciales. Cada variable solo puede buscar la cadena de alcance desde el superior para consultar la variable y el nombre de la función, es decir, primero consulte la variable o el nombre de la función en esta función, y si no se consulta a la cadena de alcance anterior hasta el alcance superior. Sin embargo, ningún entorno puede buscar en la cadena de alcance e ingresar a otro entorno de ejecución.
Los parámetros de la función también se tratan como variables, por lo que sus reglas de acceso son las mismas que otras variables en el entorno de ejecución.
1. Extienda la cadena de alcance
La cadena de alcance se extiende cuando el flujo de ejecución ingresa a cualquiera de las siguientes afirmaciones:
• Catch Bloque de la declaración de captura de try
• Con la declaración
Estas dos declaraciones agregarán un objeto variable al extremo frontal del alcance.
Para la instrucción With, la variable especificada se agrega a la cadena de alcance. Para la declaración de captura, se crea un nuevo objeto variable, que contiene la declaración del objeto incorrecto que se está lanzando.
Por ejemplo:
función buildUrl () {var qs = "? debug = true"; con (ubicación) {var url = href + qs; } URL de retorno;}La instrucción With recibe un objeto de ubicación, por lo que su objeto variable contiene las propiedades y métodos utilizados por el objeto de ubicación, y este objeto variable se agrega al extremo frontal de la cadena de alcance. Al referirse a la variable HREF en la instrucción With (en realidad refiriéndose a la ubicación.href), se puede encontrar en la variable de entorno actual. Cuando se refiere a la variable QS, se hace referencia a la variable definida en buildURL (), que se encuentra en el objeto variable de entorno de funciones. En cuanto a la declaración con la declaración, se define una variable con nombre URL, por lo que la URL se convierte en parte del entorno de ejecución de funciones y puede devolverse como el valor de la función.
2. Sin alcance de nivel de bloque
En JavaScript, los aparatos ortopédicos encerrados no tienen alcance propio. Mira el siguiente código:
if (true) {var color = "azul";} alerta (color); // "azul"En JavaScript, la declaración variable creada por la instrucción if/for agrega la variable al entorno de ejecución actual. Por ejemplo:
para (var i = 0; i <10; i ++) {dosomething (i);} alerta (i); // 10Reciclaje de basura
Similar a Java, JavaScript también tiene un mecanismo automático de reciclaje de basura. El entorno de ejecución es responsable de administrar la memoria utilizada durante la ejecución del código. Al escribir programas, no hay necesidad de problemas de uso de memoria relacionados. La asignación de la memoria requerida y el reciclaje de la memoria inútil se implementan completamente. El principio del mecanismo de recolección de basura es: descubrir variables que ya no se usan y luego liberen la memoria que ocupa. Para hacer esto, el recolector de basura realizará esta operación periódicamente en un intervalo de tiempo fijo (o un tiempo de recolección predeterminado durante la ejecución del código).
Antes de hacer la recolección de basura, debe determinar si el recurso es inútil y marcar variables que ya no se usan para reciclar su memoria en el futuro. Por lo general, hay dos implementaciones de estrategias para identificar variables inútiles.
1 Marcos Clear
La forma más común de la recolección de basura en JavaScript es la limpieza de marcadores. Cuando una variable ingresa al entorno, se marca como "ingresar al entorno"; Cuando una variable abandona el medio ambiente, se marca como "Salir del entorno". Cuando se ejecuta el recolector de basura, marca todas las variables utilizadas. Luego elimina las etiquetas de las variables en el entorno y las variables a las referencias por las variables en el entorno. Después de eso, las variables etiquetadas se considerarán como variables listas para ser eliminadas. Finalmente, el recolector de basura completa el trabajo de compensación de memoria, destruye los valores marcados y recicla el espacio de memoria que ocupan.
2. Recuento de referencia
El recuento de referencia se refiere al número de veces que se hace referencia a cada valor. Cuando se declara una variable y se asigna un valor de tipo de referencia a la variable, el número de referencias a este valor es 1. Si el mismo valor se asigna a otra variable, el número de referencias al valor se incrementa en 1. A la inversa, si la variable que contiene la referencia a este valor toma otra variable, el número de referencias a este valor se reduce por 1. Cuando el número de referencias a esta variable es 0, es decir, que no se hace otra variable, no se hace referencia a este valor. Su espacio de memoria se puede recuperar. La próxima vez que se ejecute el recolector de basura, recicla la memoria ocupada por estos valores con cero referencias.
Un problema que el conteo de referencia puede causar referencias recicladas. Por ejemplo:
Función Problema () {var obja = new Object (); var objB = nuevo objeto (); obja.ToMeOtherOBJ = objB; objb.tomoTroTobj = obja;}En el ejemplo anterior, OBJA y OBJB se refieren entre sí a través de atributos. Una vez completada la ejecución de la función, OBJA y OBJB continuarán existiendo y su recuento de referencia no será 0. Esta situación hará que la memoria ocupada por OBJA y OBJB se reciclen.
El artículo anterior habla brevemente sobre JavaScript: el entorno de ejecución, el alcance y la recolección de basura son todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.