Cada byte de un programa JavaScript se ejecuta en este o aquel contexto de ejecución. Puede pensar en estos contextos como vecinos de código, que pueden indicar cada línea de código: de dónde viene y quiénes son amigos y vecinos. Sí, esta es información muy importante, porque la Sociedad JavaScript tiene reglas bastante estrictas que estipulan quién puede interactuar con quién. El contexto operativo es una comunidad con puertas en lugar de una pequeña puerta que está abierta dentro de él.
Por lo general, podemos referirnos a estos límites sociales como ámbitos y tener suficiente importancia para legislar en la carta de cada vecino, que es la cadena de alcance del contexto del que queremos hablar. Dentro de una relación de vecindario específica, el código solo puede acceder a variables dentro de su cadena de alcance. En comparación con las variables más allá de su vecindario, el código prefiere tratar con el local (local, es decir, local).
Cualquier lenguaje de programación tiene el concepto de alcance. En pocas palabras, el alcance es el alcance accesible de variables y funciones, es decir, el alcance controla la visibilidad y el ciclo de vida de las variables y funciones. El alcance de JavaScript siempre ha sido un punto de conocimiento que es difícil de entender en el desarrollo frontal. Recuerde algunas palabras para resolver fácilmente el alcance de JavaScript.
1. "No hay alcance de nivel de bloque en JavaScript"
Hay un alcance de nivel de bloque en Java o C#, es decir, los frenos también son un alcance.
public static void main () {if (1 == 1) {string name = "siete"; } System.out.println (nombre);} // Informar un error public static void main () {if (1 == 1) {string name = "siete"; } Console.writeLine (nombre);} // Informar un errorNo hay alcance a nivel de bloque en JavaScript
función main () {if (1 == 1) {var name = 'siete'; } console.log (nombre);} // Salida: siete2. JavaScript adopta el alcance de la función
En JavaScript, cada función actúa como un alcance, y no se puede acceder a variables en el alcance interno externamente.
función main () {var innerValue = 'siete';} main (); console.log (Innervalue); // Error: no capturado referenceError: inervalue no está definido3. Javascript Chain de alcance
Dado que cada función en JavaScript es un alcance, si aparece una función anidada de la función, aparecerá una cadena de alcance.
xo = 'Alex'; función func () {var xo = "siete"; function inner () {var xo = 'alvin'; console.log (xo); } inner ();} func ();Por ejemplo, el código anterior aparece en la cadena de alcance compuesta por tres ámbitos. Si aparece la cadena de alcance, el orden aparecerá cuando busque variables. Para el ejemplo anterior:
Cuando console.log (xo) se ejecuta, su orden de búsqueda es buscar根据作用域链从内到外. Si la capa interna no existe, buscará gradualmente hasta que no se encuentre excepción.
4. La cadena de alcance de JavaScript se ha creado antes de la ejecución
El alcance de JavaScript se ha creado antes de que se ejecute. Cuando se ejecuta en el futuro, solo necesita buscar de acuerdo con la cadena de alcance.
Ejemplo 1:
xo = 'Alex'; función func () {var xo = "siete"; function inner () {console.log (xo); } return inner;} var ret = func (); ret (); // resultado de salida: sieteEl código anterior ya existe antes de que se llame a la función:
Alcance global -> alcance de función func -> alcance de la función interna
Al ejecutar [ret ();], ya que se refiere a la función interna, la cadena de alcance de esta función se ha definido como: alcance global -> función de función de función -> alcance de la función interna, por lo que al ejecutar [ret ();], las variables se encontrarán basadas en la cadena de alcance existente.
Ejemplo 2:
xo = 'Alex'; función func () {var xo = "eirc"; function inner () {console.log (xo); } xo = 'siete'; return inner;} var ret = func (); ret (); // resultado de salida: sieteEl código anterior tiene el mismo propósito que el Ejemplo 1, y también enfatiza que la cadena de alcance ya existe antes de que se llame la función:
Alcance global -> alcance de función func -> alcance de la función interna
De manera diferente, al ejecutar [var ret = func ();], el valor de la variable XO en el alcance func se ha restablecido a "siete" de "Eric", por lo que al ejecutar [ret ();] más tarde, solo puede encontrar "siete".
Ejemplo 3:
xo = 'alex'; function bar () {console.log (xo);} función func () {var xo = "siete"; Barra de retorno;} var ret = func (); ret (); // resultado de salida: AlexEn el código anterior, se han creado dos cadenas de alcance antes de ejecutar la función:
Alcance global -> alcance de la función de barra
Alcance global -> alcance funcional de funciones
Al ejecutar [ret ();], RET se refiere a la función de la barra, y la cadena de alcance de la función de la barra ya existe: alcance global -> alcance de la función de barra, por lo que cuando se ejecuta, se buscará en función de la cadena de alcance existente.
5. Declaración por adelantado
Si no crea variables y las usa directamente en JavaScript, se informará un error:
console.log (xxoo); // Error: referenceError no capturado: xxoo no está definido
En JavaScript, si se crea un valor sin asignar un valor, el valor está indefinido, como:
var xxoo; console.log (xxoo); // salida: indefinido en la función si se escribe así: function foo () {console.log (xo); var xo = 'siete';} foo (); // Salida: UndefinedEl código anterior no informa un error, sino que emite indefinidos. La razón es que antes de que se ejecuten las funciones de JavaScript, declararán todas las variables en ellas sin asignar valores. Por lo tanto, es equivalente al ejemplo anterior que la función ya ha ejecutado var xo cuando "precompilado"; Entonces, la salida del código anterior no está definido.
JS es un idioma muy interesante. Dado que muchas de sus características están dirigidas a la operación de DOM en HTML, parece casual y un poco menos riguroso. Sin embargo, con la prosperidad continua y el desarrollo del front-end y el aumento del nodo, JS ya no es un "lenguaje de juguete" o una "extensión CSS" en la era de JQuery. Lo mencionado en este artículo es fácil de confundirse o malinterpretarse para los novatos y los desarrolladores de JS que han pasado por el desarrollo web tradicional. Espero que este artículo pueda ser útil.