Introducción a JavaScript para principiantes

Funciones

Dentro de los tipos por referencia ya hemos aprendido sobre los objetos y los arreglos, ahora es el turno de las funciones.

Las funciones son uno de los tipos de bloque de código fundamentales en la programación. Son esencialmente una serie de instrucciones reutilizables que realizan una determinada tarea o cálculo sobre unos valores.

Se entiende mucho mejor en la práctica, así que vamos a crear una para su funcionamiento:

index.js

function saludar() {
  console.log('Hola mundo');
}

No es necesario finalizar el bloque de la función con punto coma.

Una vez la tenemos definida la podemos ejecutar haciendo referencia a su nombre:

saludar();

Los paréntesis es lo que indica que queremos ejecutar la función, sino los ponemos simplemente haríamos referencia a ella.

Podemos ejecutarla tantas veces como queramos:

saludar();
saludar();
saludar();

Tal como tenemos nuestra función no es muy útil, sólo imprime un mensaje, vamos a transformarla en algo más interesante.

Las funciones pueden recibir datos, datos que pueden manipularse dentro de la función para realizar diferentes tareas. Es precisamente el hecho de que una función puede recibir datos lo que las hace tan versátiles y uno de los conceptos claves de la programación.

Por ejemplo podríamos recibir un nombre y saludarlo. Para hacerlo es muy sencillo, sólo tenemos que definir un parámetro de la siguiente forma:

function saludar(nombre) {
  console.log('Hola mundo');
}

El parámetro nombre se comportará como una variable que únicamente existirá dentro de la función, así que podemos hacer uso de ella:

function saludar(nombre) {
  console.log('Hola ' + nombre);
}

Ahora para enviar el nombre, deberemos pasar el valor durante la llamada de la función como si fuera una variable o literal:

saludar('Héctor');

En este punto es importante hacer una aclaración. Los valores que enviamos a una función se llaman argumentos, pero durante la definición nos referimos a ellos como parámetros.

Sea como sea con este cambio hemos transformado la función en algo dinámico que tiene comportamientos distintos dependiendo del nombre que le pasemos:

saludar('Daniel');
saludar('Javier');

¿Y si quisiéramos enviar un segundo argumento con el apellido? Pues deberíamos añadir un segundo parámetro en la definición:

function saludar(nombre, apellido) {
  console.log('Hola ' + nombre + ' ' + apellido);  // es mejorable
} 

Y al ejecutarlo enviar ese segundo argumento:

saludar('Héctor', 'Costa');

Por cierto, ¿qué valor creéis que tiene el parámetro apellido si no lo enviamos?

saludar('Héctor');

Pues tiene el valor undefined, como si fuera una variable no inicializada en el ámbito de la función.