"Alcance" se refiere al contexto actual de ejecución en el que su código puede hacer referencia o "ver" valores y expresiones. Se puede acceder a variables, objetos y funciones de varias partes del código en función de sus ámbitos.
En JavaScript, las variables, los objetos y las funciones pueden tener un alcance global, un alcance de módulo, un alcance de bloque o un alcance de función.
Alcance global en JavaScript
Cualquier valor declarado fuera de una función o un bloque en un script tiene un alcance global y cualquier otro archivo de script en su programa puede acceder a él.
Por ejemplo, declarar una variable global en un archivo:
// índice.js
vamos variable global = "algún valor"
Significa que cualquier otro script en su programa puede acceder a él:
// otroScript.js
consola.log (variable global) // algún valor
Declaración de variables de JavaScript en el ámbito global es una mala práctica porque puede conducir a la contaminación del espacio de nombres. El espacio de nombres global es el espacio superior de Javascript que contiene las variables, objetos y funciones. En un navegador, se adjunta a la
Ventana objeto, mientras que NodeJS usa un objeto llamado global.Contaminar el espacio de nombres global puede provocar una colisión de nombres. Esta es una situación en la que su código intenta usar el mismo nombre de variable para diferentes cosas en el mismo espacio de nombres. Las colisiones de nombres se encuentran a menudo en proyectos grandes que usan varias bibliotecas de terceros.
Alcance del módulo
Un módulo es un archivo independiente que encapsula y exporta fragmentos de código para que los utilicen otros módulos de un proyecto. Le permite organizar y mantener su base de código de manera más eficiente.
Módulos ES formalizados el patrón del módulo de JavaScript en JavaScript en 2015.
Las variables que declaras en un módulo están en el ámbito de ese módulo, lo que significa que ninguna otra parte del programa puede acceder a ellas.
Solo puede usar una variable declarada en un módulo fuera de él si el módulo exporta esa variable usando el exportar palabra clave. Luego puede importar ese nombre a otro módulo usando el importar palabra clave.
Aquí hay un ejemplo que muestra la exportación de una clase:
// índice.js
exportarclaseFoo{
constructor(propiedad_1, propiedad_2) {
este.propiedad_1 = propiedad_1
este.propiedad_2 = propiedad_2
}
}
Y así es como puede importar ese módulo y usar la propiedad que exporta:
// algunModulo.js
importar { Foo } de './index.js'const bar = new Foo('Foo', 'bar')
consola.log (barra.propiedad_1) // Foo
Los archivos no se declaran como módulos de forma predeterminada en JavaScript.
En JavaScript del lado del cliente, puede declarar un script como un módulo configurando el escribe atribuir a módulo sobre el guion etiqueta:
<tipo de guión ="módulo" origen="índice.js"></script>
En NodeJS, puede declarar un script como un módulo configurando el escribe propiedad a módulo en tus paquete.json expediente:
{
"escribe": "módulo"
}
Ámbito de bloque
Un bloque en JavaScript es donde comienzan y terminan un par de llaves.
Variables declaradas dentro de un bloque con el dejar, y constante las palabras clave están en el ámbito de ese bloque, lo que significa que no puede acceder a ellas fuera de él. Este ámbito no se aplica a las variables declaradas utilizando el variable palabra clave:
{ // Comienzo del bloque
constante uno = '1'
sean dos = '2'
var tres = '3'
} // Fin del bloqueconsola.log (uno) // arroja error
consola.log (tres) // "3"
Las variables encerradas en el bloque de arriba y declaradas como const o let solo son accesibles dentro del bloque. Sin embargo, puede acceder a la variable declarada usando el variable palabra clave fuera del bloque.
Alcance de la función
Las variables declaradas dentro de una función se conocen comúnmente como variables locales y están en el ámbito de la función. No puede acceder a ellos fuera de la función. Este ámbito se aplica a las variables declaradas con el variable, dejar, y constante palabras clave
Dado que las variables declaradas en una función son locales a la función, los nombres de las variables se pueden reutilizar. La reutilización de nombres de variables con ámbito de función se conoce como sombreado de variables, y se dice que la variable externa está "sombreada".
Por ejemplo:
funciónmultiplicar() {
dejar uno = 1
variable dos = 2
constante tres = 3devolver uno dos tres
}
// Sombreado variable
constante tres = 'tres' // No arroja un error
Una comprensión de las reglas de alcance es vital
Tener una idea de los ámbitos disponibles en JavaScript hace que sea más fácil para usted evitar errores. Intentar acceder a una variable que no está disponible en un ámbito particular es una fuente madura de errores.
Una comprensión del alcance también implica conceptos como la contaminación del espacio de nombres global, que puede hacer que su código sea más propenso a errores.