El alcance es siempre la principal prioridad en cualquier lenguaje de programación porque controla la visibilidad y el ciclo de vida de las variables y parámetros. Hablando de esto, primero comprenda dos conceptos: alcance de nivel de bloque y alcance de funciones.
¿Qué es un alcance de nivel de bloque?
La declaración establecida en cualquier par de aparatos ortopédicos rizados ({y}) pertenece a un bloque, y todas las variables definidas en esto son invisibles fuera del bloque de código, que llamamos alcance a nivel de bloque.
El alcance de la función es fácil de entender (*^__^*), y los parámetros y variables definidas en la función son invisibles fuera de la función.
La mayoría de los idiomas de clase C tienen ámbitos de nivel de bloque, pero JS no. Consulte la demostración a continuación:
// c lenguaje#incluye <stdio.h> void main () {int i = 2; i--; if (i) {int j = 3; } printf ("%d/n", j); }Al ejecutar este código, aparecerá un error de "usar una variable indefinida: j". Como puede ver, el lenguaje C tiene un alcance de nivel de bloque porque J se define en el bloque de instrucciones de IF, por lo que es inaccesible fuera del bloque.
Y cómo funciona JS, veamos otra demostración:
Functin test () {for (var i = 0; i <3; i ++) {} alert (i); } prueba();Ejecute este código y aparece "3". Se puede ver que fuera del bloque, la variable que definí en el bloque todavía es accesible. Es decir, JS no es compatible con los ámbitos de nivel de bloque, solo admite ámbitos de funciones, y las variables definidas en cualquier lugar de una función son visibles en cualquier lugar de esa función.
Entonces, ¿cómo hacemos que JS tenga un alcance de nivel de bloque? ¿Todavía recuerdas que cuando se llama la variable definida en una función, la variable será destruida? ¿Podemos usar esta función para simular el alcance de nivel de bloque de JS? Mira la siguiente demostración:
function test () {(function () {for (var i = 0; i <4; i ++) {}}) (); alerta (i); } prueba();Ejecutarlo nuevamente en este momento, aparecerá un error indefinido de "I". Jaja, se implementa ~~~ Aquí, ponemos el bloqueo de la declaración para un cierre y llamamos a esta función. Cuando se complete la llamada de función, la variable seré destruida automáticamente, por lo que no podemos acceder a ella fuera del bloque.
La característica de cierre de JS es la característica más importante ((*^__^*) todos entienden). En JS, para evitar conflictos de nombres, debemos tratar de evitar el uso de variables globales y funciones globales. Entonces, ¿cómo evitarlo? Ok, como se muestra en la demostración anterior, podemos poner todo lo que queremos definir en uno
(function () {// content}) ();Entre ellos, en este momento, ¿es equivalente a agregar un alcance de función a su capa externa? Los programas fuera de este alcance no pueden acceder a ellos.