Lección 25: Funciones
🧠 Concepto
Section titled “🧠 Concepto”Las funciones son bloques de código reutilizable que realizan una tarea específica. Son uno de los pilares de la programación. En JavaScript, las funciones son ciudadanos de primera clase, lo que significa que pueden asignarse a variables, pasarse como argumentos y devolverse desde otras funciones.
Function Declaration (Declaración de función)
Section titled “Function Declaration (Declaración de función)”La forma más tradicional de definir una función.
function saludar(nombre) { console.log(`Hola, ${nombre}!`);}
saludar('Ana'); // "Hola, Ana!"Partes de una función:
function— palabra clavesaludar— nombre de la función(nombre)— parámetros (entradas){ ... }— cuerpo de la función (código a ejecutar)
Function Expression (Expresión de función)
Section titled “Function Expression (Expresión de función)”Asignas una función anónima a una variable.
const sumar = function(a, b) { return a + b;};
console.log(sumar(5, 3)); // 8Parámetros y argumentos
Section titled “Parámetros y argumentos”Los parámetros son las variables que definimos al crear la función. Los argumentos son los valores que pasamos al llamarla.
function multiplicar(a, b) { // a y b son parámetros return a * b;}
console.log(multiplicar(4, 5)); // 4 y 5 son argumentos → 20return
Section titled “return”return devuelve un valor desde la función. Sin return, la función devuelve undefined.
function suma(a, b) { return a + b; console.log('Esto nunca se ejecuta'); // código muerto}
let resultado = suma(10, 20);console.log(resultado); // 30Hoisting de funciones declaradas
Section titled “Hoisting de funciones declaradas”Las function declarations se elevan (hoisting) al inicio del archivo, por lo que puedes llamarlas antes de definirlas. Las function expressions NO tienen hoisting.
// ✅ Funciona por hoistingconsole.log(restar(10, 3)); // 7
function restar(a, b) { return a - b;}
// ❌ No funcionaconsole.log(dividir(10, 2)); // TypeError: dividir is not a function
const dividir = function(a, b) { return a / b;};Funciones como ciudadanos de primera clase
Section titled “Funciones como ciudadanos de primera clase”En JavaScript, las funciones son valores como cualquier otro.
// Asignar función a variableconst miFuncion = function() { console.log('Soy un valor');};
// Pasar función como argumento (callback)function ejecutarOperacion(a, b, operacion) { return operacion(a, b);}
function suma(a, b) { return a + b; }function resta(a, b) { return a - b; }
console.log(ejecutarOperacion(10, 5, suma)); // 15console.log(ejecutarOperacion(10, 5, resta)); // 5
// Devolver función desde otra funciónfunction crearMultiplicador(factor) { return function(numero) { return numero * factor; };}
const duplicar = crearMultiplicador(2);console.log(duplicar(7)); // 14💻 Ejemplo
Section titled “💻 Ejemplo”// Función que calcula el IMCfunction calcularIMC(peso, altura) { let imc = peso / (altura * altura); return imc;}
function clasificarIMC(imc) { if (imc < 18.5) return 'Bajo peso'; if (imc < 25) return 'Normal'; if (imc < 30) return 'Sobrepeso'; return 'Obesidad';}
// Usolet peso = 70; // kglet altura = 1.75; // metroslet imc = calcularIMC(peso, altura);console.log(`Tu IMC es ${imc.toFixed(1)}: ${clasificarIMC(imc)}`);
// Función como callbackfunction procesarArray(arr, callback) { let resultado = []; for (let elemento of arr) { resultado.push(callback(elemento)); } return resultado;}
let numeros = [1, 2, 3, 4, 5];let cuadrados = procesarArray(numeros, function(n) { return n * n;});console.log('Cuadrados:', cuadrados); // [1, 4, 9, 16, 25]📝 Ejercicio
Section titled “📝 Ejercicio”- Crea un archivo
funciones.js. - Escribe una function declaration
esPar(n)que devuelvatruesi n es par. - Escribe una function expression
factorial(n)que calcule el factorial de un número. - Escribe una función
saludarPersona(nombre, edad)que usereturny devuelva un saludo personalizado. - Escribe una función
aplicarOperacion(a, b, operacion)que reciba un callback y lo ejecute. - Llama a la función
esParantes de declararla (para probar hoisting).
// Hoisting: funciona aunque esté declarada despuésconsole.log('¿10 es par?', esPar(10));console.log('¿7 es par?', esPar(7));
function esPar(n) { return n % 2 === 0;}
// Function expressionconst factorial = function(n) { if (n <= 1) return 1; return n * factorial(n - 1);};console.log('Factorial de 5:', factorial(5)); // 120
// Función con returnfunction saludarPersona(nombre, edad) { return `Hola, soy ${nombre} y tengo ${edad} años.`;}console.log(saludarPersona('María', 30));
// Función que recibe callbackfunction aplicarOperacion(a, b, operacion) { return operacion(a, b);}
const multiplicar = function(x, y) { return x * y; };console.log('10 * 5 =', aplicarOperacion(10, 5, multiplicar));console.log('10 + 5 =', aplicarOperacion(10, 5, function(x, y) { return x + y; }));⚠️ Nota
Section titled “⚠️ Nota”La diferencia clave entre declaración y expresión de función:
| Característica | Function Declaration | Function Expression |
|---|---|---|
| Hoisting | ✅ Sí | ❌ No |
| Sintaxis | function nombre() | const fn = function() |
| Se puede llamar antes | ✅ Sí | ❌ No |
Usa function declaration para funciones principales. Usa function expression para asignar funciones a variables o pasarlas como argumentos.
En la próxima sección del curso veremos arrow functions (=>), una forma más moderna y concisa de escribir funciones:
// Arrow function (preview)const suma = (a, b) => a + b;const cuadrado = n => n * n;Son las más usadas en JavaScript moderno, especialmente como callbacks. Pero primero domina las function declarations y expressions tradicionales.