El ámbito (scope) y los cierres (closures) son conceptos clave en JavaScript que afectan cómo las variables y funciones acceden a su entorno. Vamos a explorar cómo funcionan y cómo se relacionan en JavaScript.
Ámbito (Scope)
El ámbito se refiere a la accesibilidad de variables, funciones y objetos en una parte específica del código. JavaScript tiene dos tipos principales de ámbito:
1. Ámbito Global: Las variables declaradas fuera de cualquier función están en el ámbito global y son accesibles en todo el código.
const globalVariable = 10;
function exampleFunction() {
console.log(globalVariable);
}
exampleFunction(); // Imprime: 10
2.Ámbito Local o de Función: Las variables declaradas dentro de una función tienen ámbito local y solo son accesibles dentro de esa función.
function exampleFunction() {
const localVariable = 20;
console.log(localVariable);
}
exampleFunction(); // Imprime: 20
console.log(localVariable); // Error: localVariable no está definida
Cierres (Closures)
Un cierre (closure) es una función que tiene acceso a su propio alcance, al alcance de la función contenedora y al ámbito global, incluso después de que la función contenedora haya finalizado su ejecución.
function outerFunction() {
const message = 'Hola desde outerFunction';
function innerFunction() {
console.log(message);
}
return innerFunction;
}
const closure = outerFunction();
closure(); // Imprime: Hola desde outerFunction
En este ejemplo, `closure` es una función que tiene acceso a la variable `message` incluso después de que `outerFunction` ha terminado de ejecutarse. Los cierres son útiles para mantener datos privados y crear funciones "privadas" en JavaScript.
Uso Práctico de Cierres
Los cierres son fundamentales en JavaScript para crear módulos, funciones con estado y funciones de retorno de llamada (callbacks). Proporcionan un mecanismo para acceder a variables y datos de manera segura y encapsulada.
function counter() {
let count = 0;
function increment() {
count++;
console.log('Contador:', count);
}
function decrement() {
count--;
console.log('Contador:', count);
}
return {
increment,
decrement
};
}
const myCounter = counter();
myCounter.increment(); // Imprime: Contador: 1
myCounter.increment(); // Imprime: Contador: 2
myCounter.decrement(); // Imprime: Contador: 1
En este ejemplo, `counter` es una función que retorna un objeto con dos métodos (`increment` y `decrement`). Estos métodos tienen acceso al ámbito de `counter` y pueden acceder y modificar la variable `count`.
Estos son los conceptos básicos de ámbito y cierres en JavaScript. Entenderlos es esencial para escribir código JavaScript eficiente y efectivo. ¡Sigue practicando y experimentando para mejorar tu comprensión y habilidades!