Scope en JavaScript
En este tutorial te explico qué es el Scope y cómo funciona en JavaScript.
El Scope es un contexto de ejecución de código que determina que ciertas variables sean accesibles, mientras que otras no.
Para que una variable esté disponible para su uso, deberá estar en el scope o alcance desde el cual se intenta acceder a ella.
Existen dos tipos de scope:
- Global: en él se encuentran las variables declaradas fuera de una sentencia bloque o una función;
- Local: en él se encuentran las variables declaradas dentro de una sentencia bloque o una función;
Una sentencia bloque es una porción de código delimitada por {}
, como puede ser un bucle if
, for
, while
, etc;
Utilizando las palabras clave let
y const
podremos declarar variables cuyo alcance será la sentencia bloque en la cual se encuentren declaradas.
Por otra parte, el alcance de las variables declaradas con var
será al nivel de función. Por lo tanto, aquellas que no sean declaradas dentro de una función, serán variables globales.
Veamos algunos ejemplos:
var a = true; // global
let b = 2; // global
const c = 'Esta es una constante'; // global
if (a === true) {
const d = 10; // local de bloque
let e = 20; // local de bloque
var f = 30; // global
}
function probarScope () {
const g = new Date(); // local de bloque-función
let h = [1, 2, 3]; // local de bloque-función
var i = { valor: 'prueba' }; // local de función
}
console.log(a); // true
console.log(b); // 2
console.log(c); // "Esta es una constante"
// d y e no son accesibles dado que son locales dentro del bloque if
console.log(d); // "ReferenceError: d is not defined"
console.log(e); // ReferenceError: e is not defined
// f es global y por lo tanto podemos accederla
console.log(f); // devuelve "30"
// g y h son locales y por lo tanto no accesibles globalmente
console.log(g); // ReferenceError: g is not defined
console.log(h); // ReferenceError: h is not defined
// i es local en la función probarScope y por lo tanto inaccesible también en el contexto global
console.log(i); // ReferenceError: i is not defined
En mi post sobre variables en JavaScript explico más sobre var
, const
y let
, sus características y usos.