En este tutorial, aprenderá sobre el alcance de las variables en JavaScript con la ayuda de ejemplos.
El alcance se refiere a la disponibilidad de variables y funciones en ciertas partes del código.
En JavaScript, una variable tiene dos tipos de alcance:
- Alcance global
- Alcance local
Alcance global
Una variable declarada en la parte superior de un programa o fuera de una función se considera una variable de alcance global.
Veamos un ejemplo de una variable de alcance 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 variable let a = "hello"; function greet() ( a = 3; ) // before the function call console.log(a); //after the function call greet(); console.log(a); // 3
En el programa anterior, la variable a es una variable global. El valor de a es hola. Luego, 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 utilizar 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 se declaró usando let a = "hello"
, el programa arrojaría un error.
Nota : En JavaScript, hay "strict mode";
una variable en la que no se puede utilizar sin declararla. Para obtener más información sobre estricto, visite JavaScript Strict.
Alcance local
Una variable también puede tener un alcance local, es decir, solo se puede acceder a ella dentro de una función.
Ejemplo 1: Variable de alcance local
// program showing local scope of a variable let a = "hello"; function greet() ( let b = "World" console.log(a + b); ) greet(); console.log(a + b); // error
Salida
helloWorld Uncaught ReferenceError: b no está definido
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 saludar. Por tanto, cuando intentamos acceder a la variable b fuera de la función, se produce un error.
deja que tenga alcance de bloque
La let
palabra clave tiene un alcance de bloque (solo se puede acceder a la variable en el bloque inmediato).
Ejemplo 2: variable de ámbito de bloque
// program showing block-scoped concept // global variable let 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
Hola mundo Hola mundo hola Uncaught ReferenceError: x no está definido
En el programa anterior, variable
- a es una variable global. Se puede acceder a él desde cualquier lugar del programa.
- b es una variable local. Solo se puede acceder dentro de la función
greet
. - c es una variable de ámbito de bloque. Solo se puede acceder dentro del
if
bloque de instrucciones.
Por lo tanto, en el programa anterior, los dos primeros console.log()
funcionan sin ningún problema.
Sin embargo, estamos intentando acceder a la variable c de ámbito de bloque fuera del bloque en el tercero console.log()
. Esto arrojará un error.
Nota : En JavaScript, var
tiene un alcance de función y un alcance de let
bloque. Si intenta usar var c = 'hello';
dentro de la if
instrucción 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.