Intermedio
Funciones y scope
Objetivo: Definir funciones con distintas sintaxis y comprender el scope léxico y las closures básicas.
Explicación
Las funciones son bloques de código reutilizables.
- Declaración: function saluda() {} se eleva (hoisting), puede usarse antes de declararse.
- Expresión: const saluda = function() {} no se eleva.
- Arrow function: const saluda = () => {}, sintaxis corta; no tiene su propio this.
Scope léxico: una función ve las variables de sus scopes externos, no al revés. Las variables declaradas con let/const viven en el bloque donde se crean.
Las closures se basan en este comportamiento: una función “recuerda” el entorno donde fue creada.
Ejemplos
function sumar(a, b) {
return a + b
}
console.log(sumar(2, 3)) // 5const doblar = (n) => n * 2
const saludar = (nombre) => `Hola, ${nombre}`
console.log(doblar(4), saludar('Ada'))function externa() {
const secreto = 42
return () => secreto
}
const fn = externa()
console.log(fn()) // 42: la closure conserva "secreto"Comprueba tu comprensión
Pregunta 1 de 5
Práctica opcional
Estos ejercicios no afectan tu dominio de la lección.
- Crea una función
crearContadorque retorne otra función que incremente y devuelva un número privado. Prueba dos contadores independientes. - Compara: const f = () => ({}) vs const f = () => {}. ¿Por qué la primera retorna un objeto y la segunda no?