El alcance de JavaScript siempre ha sido un punto de conocimiento que es difícil de entender en el desarrollo frontal. Recuerde algunas palabras sobre el alcance de JavaScript. No tienes miedo de viajar por el mundo ...
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 (name);} // Informe un error Public static void main () {if (1 == 1) {string name = "siete";} console.writeLine (nombre);} // Informe un error un error 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.
function main () {var innerValue = 'siete';} main (); console.log (innerValue); // error: no capturado referenceError: innerValue 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'; function 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 desde el interior hacia el exterior de acuerdo con la prioridad de la cadena de alcance. Si la capa interna no existe, buscará gradualmente hasta que no se encuentre excepción.
425762-20160707114743577-37359182.png
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'; function 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'; function 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: Undefined
Si esto se escribe en la función:
función foo () {console.log (xo); var xo = 'siete';} foo (); // Útil: indefinidoEl 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.
Lo anterior es lo que el editor le presentó para resolver el alcance de JavaScript (clásico) en solo cinco oraciones. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!