Hola, les saluda Miguel y para hoy les traigo este nuevo artículo.
Significa «¿dónde buscar cosas?» . Lo que buscamos significa que buscamos variables, a qué variables tenemos acceso. Hay dos tipos de alcance de JavaScript, es decir, global y local.
Índice
Alcance global
Una variable declarada fuera de una función se vuelve global . Todas las funciones tienen acceso a variables globales. Las declaraciones, donde ocurren, se procesarán antes de que se realice la ejecución del código y su valor inicial es. Esto se llama como y lo discutiremos también.
Alcance local
Las variables que están disponibles solo en una parte específica de nuestro código se consideran en el ámbito local. Local tiene dos tipos de alcance, función y bloque ( lo discutiremos más adelante ).
El alcance de la función es cuando se puede acceder a una variable declarada en función solo dentro de la función y no fuera.
Tomemos un ejemplo donde podemos entender cómo funciona el alcance global y local en el tiempo de compilación y ejecución. Así tendrá una idea clara de cuál es el problema que tuvimos y qué deberíamos hacer para evitarlo.
Fase de compilación
Primero comencemos con cómo va la compilación. JavaScript no funciona con un enfoque de arriba hacia abajo como C o lenguaje bash. Es uno de los métodos que, al ejecutar la línea 3, no tiene idea de lo que hay en la línea 4. Entonces, ¿cómo se ejecuta JavaScript? Primero, en el proceso de compilación, compilará y funcionará declaraciones.
Entonces, si vamos línea por línea, en la línea 1 la variable se registra en global scope
. La siguiente es la línea 2 con function bar
se registra. En este caso, es una declaración de función, no una expresión de función, por lo que el compilador reconoce que es una función y tenemos que seguir adelante y descender recursivamente y compilar la barra de funciones. Entonces ahora estamos dentro del alcance de la barra y comenzaremos a compilar la línea 3.
En la mira function bar
, encuentra una variable para registrar bajo un alcance y sigue adelante y se registra (sí, foo tiene 2 declaraciones pero comenzará a verificar desde el alcance interno, es decir, aquí es de la función). La siguiente es la línea 4, nuevamente en function bar
alcance hay una función llamada function baz
que tiene que estar registrado bajo sigue adelante y se registra. Nuevamente, en este caso, es una declaración de función, por lo que el compilador reconoce que es una función y tenemos que seguir adelante y hacer un descenso recursivo y compilar el archivo en function baz
. Entonces, en la línea 4 y media hay una declaración implícita llamada como, cómo se compila, bajo el scope of baz
la variable obtiene registros. Así que termina la fase de compilación. La siguiente imagen muestra la compilación general.
Fase de ejecución
Ahora comencemos con la fase de ejecución tomando la misma pieza de código que tomamos en la fase de compilación. Comencemos con la línea 1, el valor de asignación que es Lado derecho comprueba que tiene alguna referencia para la variable y encuentra y RHS se asignará al LHS. La siguiente declaración de la barra de funciones no vendrá en la fase de ejecución, por lo que se ejecutará la línea 10. Entonces, en la línea 10, verifica que tenga alguna referencia para la declaración de función y la encuentra y comienza a ejecutar la función. La siguiente es la línea 3, igual al signo está allí, por lo que el valor de RHS se verifica en el alcance de function bar
que tiene cualquier referencia de declaración de variable y encuentra que el valor de RHS está asignado a LHS.
La siguiente línea 4–7 no se ejecutará ahora. La función de la línea 8 busca el alcance en la función, encuentra la referencia de la función y comenzará a ejecutarse. La línea 5 tiene un signo igual a las comprobaciones de RHS en el alcance de la función encuentra variable y se le asignará un valor. La siguiente es la línea 6, esto será un poco complicado, veamos cómo se ha ejecutado. El valor de RHS buscará en la función una referencia de variable que no encuentre. A continuación, irá al siguiente alcance, que es el alcance de la función para verificar la referencia, pero nuevamente dice que no se pudo encontrar. Lo siguiente es, pero nuevamente no estará allí, así que finalmente lo que hace es crear una variable en el global y se le asigna el valor » yay «.
Y la línea final arrojará un error porque no se encuentra en el alcance global.
Alcance de bloque en ES5
Arriba explicamos cómo funciona el alcance, pero no discutimos un tipo del alcance local que es el alcance de bloque. Primero explicaremos en la sintaxis de ES5 y luego veremos cómo sucede en ES6. Veamos con ejemplo.
Solo para dar una descripción general de lo que está sucediendo en el código. La línea 1 es una declaración y la línea 6 registra el foo
. Pero entre esas líneas, hay un par de líneas, se llama Expresión de función invocada inmediatamente (IIFE). Lo que hace es en la línea 4, la variable funciona como alcance del bloque, lo que significa que solo se accederá dentro del bloque. Podríamos haber creado una nueva función y colocar las líneas 3 y 4 dentro de la función y llamar a la función en la línea 6 o en la línea 7, pero no queremos contaminar el alcance externo.
Alcance de bloque en ES6
En ES6 hay y palabras clave para mantener el alcance dentro del bloque. La palabra clave es similar a la de declarar variables, pero adjuntará la variable específica al bloque en lugar de la función. Cuando el compilador la encuentre, adjuntará la variable a la función y cuando la encuentre, adjuntará la variable al bloque. Pongamos un ejemplo.
Solo para aclarar las cosas, cambiemos la palabra clave para el ejemplo anterior, y veamos qué resultado imprimirá.
Pensemos por el momento v1 que estamos declarando en la línea 4, pero cuando consolamos en la línea 2 está imprimiendo indefinido. Debería arrojar error, ¿verdad? No, porque eleva las variables.
Gracias por leer.
Añadir comentario