JavaScript de Cero a Experto / Funciones
Scope: el alcance de las variables
¿Dónde puede verse cada variable? Una que creas dentro de una función, ¿la ve el resto del programa? El SCOPE (alcance) responde eso: las reglas de qué código puede acceder a qué variables. Entenderlo bien evita una familia entera de bugs confusos —y es la base para el concepto estrella de la próxima lección, los closures.
Las habitaciones de la casa
Global vs local
moneda es GLOBAL (vive fuera de las funciones) → todos la ven, incluida la
función. mensaje es LOCAL de mostrarPrecio → solo existe mientras esa
función corre, y afuera no está definida. La regla: de adentro ves hacia
afuera, pero de afuera no ves lo de adentro.
Scope de bloque: las llaves también cuentan
Con let y const, incluso las llaves de un if o un for crean su propio
"cuarto":
const bono declarado dentro del if solo existe ahí; afuera no. Esto es
bueno: mantiene las variables acotadas a donde se usan, evitando que se
"escapen" y causen confusión. (Este respeto por los bloques es justo lo que
let/const arreglaron frente al viejo var, que se escapaba de los
bloques — por eso el curso no usa var.)
Declaras const total dentro de una función calcular(). Luego, FUERA de la función, escribes console.log(total). ¿Qué pasa?
Mini-reto
Experimenta el scope en "Mi Bolsillo": crea una función
function resumen(gastos) que dentro declare un const total. Intenta
console.log(total) DESDE AFUERA (verás el error), luego arréglalo haciendo
que la función lo DEVUELVA con return y guardándolo afuera
(const t = resumen(...)). Provocar el error de scope y curarlo con return
te graba la regla mejor que memorizarla.
Qué sigue
Sabes que lo de adentro ve lo de afuera. La próxima lección lleva esa idea a su consecuencia más poderosa y famosa: los CLOSURES. Una función puede "recordar" las variables del lugar donde nació, incluso después de que ese lugar terminó. Suena raro, pero es la base de patrones que usarás toda tu carrera.