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)) // 5
const 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

¿Cuál es la diferencia de scope entre function y let/const?

Práctica opcional

Estos ejercicios no afectan tu dominio de la lección.

  • Crea una función crearContador que 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?