Explícame con dibujos o ejemplos sencillos la diferencia entre miFuncion, miFuncion(), () => {}, IIFE, callbacks, funciones guardadas en variables
EL PROBLEMA
Supongamos este botón:
<button id="btn"> Click </button>
Y esta función:
function saludar() { console.log("Hola"); }
❌ ERROR COMÚN
btn.addEventListener("click", saludar());
¿Qué ocurre?
JavaScript ve esto:
saludar()
y dice:
“Ah, quieres ejecutarla AHORITA”.
Entonces:
💥 Hola
aparece inmediatamente al cargar la página.
¿Qué recibe el click?
Después de ejecutarse, la función normalmente devuelve:
undefined
Entonces realmente queda algo así:
btn.addEventListener("click", undefined);
Y el botón ya no tiene función.
DIBUJO SIMPLE
❌ Con paréntesis
click → saludar() 💥 se ejecuta YA
NO espera el click.
✅ CORRECTO
btn.addEventListener("click", saludar);
Aquí NO hay ().
Entonces JavaScript entiende:
“Solo guardaré la referencia de la función”.
DIBUJO
📦 saludar
El botón guarda la función para usarla después.
Cuando haces click
👆 click ↓ 💥 saludar()
Ahora sí se ejecuta.
REGLA DE ORO
Con ()
miFuncion()
👉 EJECUTA AHORA
Sin ()
miFuncion
👉 SOLO PASA LA FUNCIÓN
EJEMPLO VISUAL COMPLETO
function saludar() { console.log("Hola"); }
❌ Incorrecto
btn.addEventListener("click", saludar());
CARGA PAGINA ↓ 💥 Hola
✅ Correcto
btn.addEventListener("click", saludar);
CARGA PAGINA ↓ (no pasa nada) 👆 click ↓ 💥 Hola
¿Y las arrow functions?
También puedes hacer esto:
btn.addEventListener("click", () => { console.log("Hola"); });
Aquí NO se ejecuta inmediatamente porque:
() => {}
solo CREA la función.
El navegador la guarda y la ejecuta cuando ocurre el click.
¿Entonces cuándo usar ()?
✅ Cuando quieres ejecutar inmediatamente
saludar();
¿Cuándo NO usar ()?
✅ Cuando otro código la ejecutará después
Como:
- botones
- eventos
- callbacks
- setTimeout
- promises
Ejemplos:
button.addEventListener("click", saludar); setTimeout(saludar, 3000); array.forEach(saludar);
Porque esos sistemas ejecutarán la función más tarde.
Comentarios
Publicar un comentario