El ámbito se refiere a la disponibilidad de variables y funciones en ciertas partes del código.
En JavaScript, una variable tiene dos tipos de ámbito:
- Ámbito global
- Ámbito local
Ámbito global
Una variable declarada en la parte superior de un programa o fuera de una función se considera una variable de ámbito global.
Veamos un ejemplo de una variable de ámbito global.
// program to print a text let a = "hello";function greet () { console.log(a);}greet(); // hello
En el programa anterior, la variable a se declara en la parte superior de un programa y es una variable global. Significa que la variable a
se puede usar en cualquier parte del programa.
El valor de una variable global se puede cambiar dentro de una función. Por ejemplo,
// program to show the change in global variablelet a = "hello";function greet() { a = 3;}// before the function callconsole.log(a);//after the function callgreet();console.log(a); // 3
En el programa anterior, la variable a es una variable global. El valor de a es hola. A continuación, se accede a la variable a dentro de una función y el valor cambia a 3.
Por lo tanto, el valor de a cambia después de cambiarlo dentro de la función.
Nota: Es una buena práctica evitar el uso de variables globales porque el valor de una variable global puede cambiar en diferentes áreas del programa. Puede introducir resultados desconocidos en el programa.
En JavaScript, también se puede usar una variable sin declararla. Si se usa una variable sin declararla, esa variable se convierte automáticamente en una variable global.
Por ejemplo,
function greet() { a = "hello"}greet();console.log(a); // hello
En el programa anterior, la variable a es una variable global.
Si la variable fue declarada usando let a = "hello"
, el programa lanzaría un error.
Nota: En JavaScript, existe "strict mode";
en el que una variable no se puede usar sin declararla. Para obtener más información sobre strict, visite JavaScript Strict.
Ámbito local
Una variable también puede tener un ámbito local, es decir, solo se puede acceder a ella dentro de una función.
Ejemplo 1: Variable de ámbito local
// program showing local scope of a variablelet a = "hello";function greet() { let b = "World" console.log(a + b);}greet();console.log(a + b); // error
Salida
helloWorldUncaught ReferenceError: b is not defined
En el programa anterior, la variable a es una variable global y la variable b es una variable local. Solo se puede acceder a la variable b dentro de la función greet. Por lo tanto, cuando intentamos acceder a la variable b fuera de la función, se produce un error.
let tiene un ámbito de bloques
La palabra clave let
tiene un ámbito de bloques (solo se puede acceder a la variable en el bloque inmediato).
Ejemplo 2: bloque ámbito de Variable
// program showing block-scoped concept// global variablelet a = 'Hello';function greet() { // local variable let b = 'World'; console.log(a + ' ' + b); if (b == 'World') { // block-scoped variable let c = 'hello'; console.log(a + ' ' + b + ' ' + c); } // variable x cannot be accessed here console.log(a + ' ' + b + ' ' + c);}greet();
Salida
Hello WorldHello World helloUncaught ReferenceError: x is not defined
En el programa anterior, la variable
- a es una variable global. Se puede acceder a él en cualquier parte del programa.
- b es una variable local. Solo se puede acceder a él dentro de la función
greet
. - c es una variable de ámbito de bloques. Solo se puede acceder a él dentro del bloque de instrucciones
if
.
Por lo tanto, en el programa anterior, los dos primeros console.log()
funcionan sin ningún problema.
Sin embargo, estamos tratando de acceder a la variable de ámbito de bloque c fuera del bloque en la tercera console.log()
. Esto lanzará un error.
Nota: En JavaScript, var
tiene un ámbito de función y let
tiene un ámbito de bloque. Si intenta usar var c = 'hello';
dentro de la instrucción if
en el programa anterior, todo el programa funciona, ya que c se trata como una variable local.
Para obtener más información sobre let
versus var
, visite JavaScript let vs var.