Sobes.tech
Junior

¿Qué es el ámbito en JavaScript?

sobes.tech AI

Respuesta de la IA

El ámbito (Scope) en JavaScript es el contexto en el que se definen y están disponibles las variables y funciones.

En términos simples, determina dónde se puede hacer referencia a una variable o función en el código.

Existen varios tipos de ámbitos:

  • Ámbito global (Global Scope): Las variables declaradas fuera de cualquier función están en el ámbito global. Son accesibles desde cualquier lugar del código.
    // Variable global
    let globalVar = "Soy visible en todas partes";
    
    function showGlobal() {
      console.log(globalVar); // Disponible dentro de la función
    }
    
    showGlobal();
    
  • Ámbito local (Local/Function Scope): Las variables declaradas dentro de una función están en el ámbito local de esa función. Solo son accesibles dentro de esa función y en las funciones anidadas, pero no desde fuera.
    function showLocal() {
      // Variable local
      let localVar = "Solo me veo aquí";
      console.log(localVar);
    }
    
    showLocal();
    // console.log(localVar); // Error: localVar no está definida
    
  • Ámbito de bloque (Block Scope): Introducido en ES6 (ES2015) con let y const. Las variables declaradas con let o const dentro de llaves ({}), ya sea en bloques de código, bucles o condicionales, tienen ámbito de bloque. Las variables declaradas con var no tienen ámbito de bloque.
    if (true) {
      // Variable con ámbito de bloque
      let blockVar = "Solo visible en este bloque";
      console.log(blockVar);
    }
    
    // console.log(blockVar); // Error: blockVar no está definida
    
    for (let i = 0; i < 2; i++) {
      // Variable con ámbito de bloque en el ciclo
      console.log(i);
    }
    
    // console.log(i); // Error: i no está definida (si se usó let)
    

También es importante entender el concepto de cadena de ámbitos (Scope Chain). Cuando JavaScript intenta encontrar el valor de una variable, primero busca en el ámbito actual. Si no la encuentra, pasa al ámbito externo (padre), y así sucesivamente, hasta llegar al ámbito global. Si no se encuentra en ninguna parte, se lanza un error ReferenceError.