Primero, los siguientes son tres códigos que explican el alcance
// ============ Ejemplo 1 ============== Var Var Scope = 'Global'; Function fn () {Alert (ACEPE); var alcance = 'local'; alerta (alcance);} fn (); // resultado de salida? alerta (alcance); // resultado de salida? // ============ Ejemplo 2 ============ Var Var Scope = 'Global'; Function fn () {Alert (Alcope); alcance = 'local'; alerta (alcance);} fn (); // resultado de salida? alerta (alcance); // resultado de salida? // ============ Ejemplo 3 =========== Var Var Scope = 'Global'; Function Fn (Scope) {Alert (ACCO); alcance = 'local'; alerta (alcance);} fn (); // resultado de salida? alerta (alcance); // resultado de salida?Estos tres códigos tienen solo una pequeña diferencia, pero los resultados son completamente diferentes. Ejemplo 1 salidas [indefinidas, locales, globales], ejemplo 2 salidas [global, local, local], ejemplo 3 salidas [indefinido, local, global]. Si no puede responder correctamente, significa que aún no ha entendido las características de alcance de JavaScript.
¿Qué es el alcance?
Alguien puede preguntar: ¿Cuál es el alcance de la variable A? Pregunté de nuevo más tarde: ¿Cuál es el alcance de la función A? ¿Cuáles son los ámbitos de variables y funciones?
Primero veamos lo que significa "alcance". Cuando el "alcance" se descompone, significa "función" y "dominio"
El alcance es la gama accesible de variables y funciones, o el área en la que funcionan las variables o funciones.
1.cope de la función JavaScript:
El área dentro de la función es el alcance de la función, y tanto las variables como las funciones pueden acceder a las operaciones en esta área. El área fuera de la función más externa se llama alcance global, y el área dentro de la función se llama alcance local.
2. Alcance de las variables de JavaScript:
En la región donde la variable se encuentra en el código fuente, el alcance de esta variable es y se puede acceder a la variable y operarse dentro de esta área. Las variables definidas en el alcance global se denominan variables globales, y las variables definidas en la función se denominan variables locales.
Para simplemente entender, el código fuente JS se divide en áreas de bloque por función {}. Si estas áreas cambian su identidad, son el alcance de una determinada función o una cierta variable. El alcance de una variable y el alcance de una función pueden referirse a la misma área en el código fuente.
Cadena de alcance
La cadena de alcance es un mecanismo de búsqueda de funciones y variable dentro de JavaScript. Determina el alcance de las variables y funciones, es decir, el alcance. Comprenda el principio de la cadena de alcance, y puede comprender los tres ejemplos en el artículo anterior, para que pueda conocer la razón y la razón.
La cadena de alcance es un concepto en la documentación ECMAScript-262. El motor JavaScript se implementa de acuerdo con la documentación ECMAScript-262. Comprender el principio de funcionamiento del motor JavaScript es propicio para nuestra comprensión de las características de JavaScript, pero la mayoría de los programadores de JS no entenderán tecnologías muy subyacentes. Por lo tanto, al leer la documentación ECMAScript-262, podemos tener una forma intuitiva de simular el principio de funcionamiento del motor JavaScript.
Este artículo explicará el principio de formar cadenas de alcance a través de la tercera edición de ECMAScript-262-3 de 1999, e introducirá varios conceptos como el entorno de ejecución, objetos variables y objetos activos, objetos de argumentos, alcance, etc. En 2009, se publicó la quinta edición de ECMAScript-262-5th. La diferencia era que se cancelaron los conceptos como objetos variables y objetos activos, y se introdujeron nuevos conceptos como entornos léxicos y registros ambientales, por lo que no confunda los conceptos de las dos versiones.
1. contextos de ejecución
Los contextos de ejecución también se traducen en contexto de ejecución. Cuando el analizador ingresa al código ejecutable de ECMAScript, el analizador ingresa a un entorno de ejecución. El entorno de ejecución activa forma una pila lógica. El entorno de ejecución en la parte superior de esta pila lógica es el entorno de ejecución de ejecución actual.
Nota: Hay tres tipos de código ejecutable en ECMAScript, Global, Function y Eval. El entorno global es el código ejecutable global, y las funciones son el código ejecutable de funciones. La pila de lógica es un formato especial de almacenamiento de datos, caracterizado por 'Primero dentro y fuera, y luego dentro y fuera'. Agregar datos primero se empujará a la parte superior de la pila lógica, y la eliminación de datos debe eliminarse desde la parte superior.
Objeto variable, objeto activo y objeto de argumentos
Cada entorno de ejecución tiene un objeto variable asociado con él. Cuando el analizador ingresa al entorno de ejecución, se creará un objeto variable, que contiene referencias a variables y funciones declaradas en el entorno de ejecución actual.
El objeto variable es un concepto abstracto. En diferentes entornos de ejecución, los objetos variables tienen diferentes identidades. Antes de que el analizador ingrese a cualquier entorno de ejecución, se crea un objeto global. Cuando el analizador ingresa al entorno de ejecución global, el objeto global actúa como un objeto variable. Cuando el analizador ingresa a una función, se creará un objeto activo como un objeto variable.
2. Dos etapas cuando el analizador procesa el código
Todos sabemos que el analizador JavaScript analiza el código uno por uno, ¿es una estera? Esto implica dos etapas cuando el analizador procesa el código, analizando el código y ejecutando el código.
Cuando el analizador ingresa al entorno de ejecución, el objeto variable agregará variables y funciones declaradas en el entorno de ejecución como sus propiedades, lo que significa que las variables y las funciones están disponibles antes de la declaración, y el valor variable está indefinido. Esta es la razón de la promoción de variables y declaraciones de funciones (elevación). Al mismo tiempo, la cadena de alcance y esto se determinan. Este proceso es la etapa de análisis, comúnmente conocida como prepsing. Luego, el analizador comienza a ejecutar el código, agrega una referencia al valor correspondiente a la variable y obtiene el resultado de ejecución. Este proceso es la etapa de ejecución.
Vamos a nombrar dos deliciosas castañas:
var a = 123; var b = "abc"; function c () {alert ('11 ');}Después del análisis y la ejecución del código en el entorno global anterior, el objeto global se utilizará como un objeto variable y se guardarán los siguientes datos.
función testfn (a) {var b = "123"; función c () {alerta ("ABC"); }} testfn (10);Cuando el analizador ingresa al entorno de ejecución de funciones, se creará un objeto activo como un objeto variable. El objeto activo también creará un objeto de argumentos. El objeto de argumentos es un conjunto de parámetros para guardar los parámetros. Es por eso que podemos usar argumentos [0] y así sucesivamente al escribir funciones.
3. Cadena de alcance
Cada entorno de ejecución tiene una cadena de alcance asociada con él. Se define cuando el analizador ingresa al entorno de ejecución. La cadena de alcance es una lista de objetos utilizada para recuperar variables y funciones en cada objeto variable. Esto asegura que el entorno de ejecución tenga derecho a acceder a qué variables y funciones. Por ejemplo, es una castaña.
var a = '123'; función testfn (b) {var c = 'ABC'; función testfn2 () {var d = 'efg'; alerta (a); } testfn2 ();} testfn (10);La variable A no se declara en Testfn2. ¿Por qué TestFn2 puede llamar a la variable global A? ¿Cómo sucedió todo el proceso? Consulte la imagen a continuación.
Cuando el analizador ingresa al entorno de ejecución global, las variables y las funciones solo se encuentran en el objeto global al llamarlos.
Cuando el analizador ingresa el entorno de ejecución de la función TestFn, la propiedad interna de la función [[Alcance]] se llena primero en el objeto global, y luego el objeto activo TestFn se agrega al objeto global para formar una cadena de alcance.
Cuando el analizador ingresa el entorno de ejecución de la función TestFn2, la propiedad interna de la función [[Alcance]] se llena primero en la cadena de alcance principal, y luego el objeto activo TestFn2 actual se agrega al extremo frontal de la cadena de alcance para formar una nueva cadena de alcance.
Cuando TestFn2 llama a la variable A, primero busque en el objeto activo Testfn2 actual. Si no se encuentra, siga la cadena de alcance hacia arriba. Si no se encuentra, busque la cadena de alcance. Si no se encuentra, busque la cadena de alcance hasta que se encuentre en el último objeto global, de lo contrario se informará un error. Por lo tanto, se pueden llamar variables del entorno externo dentro de la función, y las variables del entorno externo no se pueden llamar dentro de la función. Este es el principio de las características de alcance.