DevPath · Aprende a programar ESPTEN

Scope, hoisting y closures

Ámbito: global, local y de bloque

El ámbito es "quién puede ver qué variable"

Imagina una casa. Lo que dejas en tu habitación no se ve desde la cocina. Las variables funcionan igual: cada una vive en una "habitación" y solo es visible desde dentro. A esa habitación la llamamos ámbito (o scope).

Entender esto te ahorra el clásico "pero si yo declaré esa variable, ¿por qué dice que no existe?". Spoiler: existe, pero en otra habitación.

Ámbito global

Una variable declarada fuera de toda función o bloque es global: se ve desde cualquier parte del programa. Cómoda, pero peligrosa si abusas: cualquiera puede tocarla.

const planeta = "Tierra"; // global
function mostrar() {
  console.log(planeta); // accesible aquí
}

Ámbito local (de función)

Las variables declaradas dentro de una función solo existen ahí:

function calcular() {
  const interna = 42;
  return interna;
}
// console.log(interna); // ❌ Error: interna no existe fuera

Ámbito de bloque

Con let y const, cada par de llaves { } (un if, un for...) crea su propia mini-habitación:

if (true) {
  let mensaje = "hola";
  console.log(mensaje); // ✅ "hola"
}
// console.log(mensaje); // ❌ Error: fuera del bloque no existe

⚠️ Trampa clásica: var no respeta el ámbito de bloque, solo el de función. Una variable var declarada dentro de un if se escapa fuera y te da sorpresas. Por eso hoy usamos let y const: respetan la habitación.

Ejemplos

La global se ve desde dentro; la local se queda encerrada en su función

const global = "soy global";
function demo() {
  const local = "soy local";
  console.log(global); // accesible
  console.log(local);  // accesible
}
demo();
Pon esto en práctica

DevPath es un curso práctico: aquí lees la teoría; en la app la pones en práctica con ejercicios que se ejecutan de verdad, sin conexión.

Empezar gratis en la app →
Hoisting (elevación) →