Ver índice de contenidos del libro

2.10. Funciones

Las funciones contienen bloques de código que se ejecutaran repetidamente. A las mismas se le pueden pasar argumentos, y opcionalmente la función puede devolver un valor.

Las funciones pueden ser creadas de varias formas:

Declaración de una función

function foo() { /* hacer algo */ }

Declaración de una función nombrada

var foo = function() { /* hacer algo */ }

Es preferible el método de función nombrada debido a algunas profundas razones técnicas. Igualmente, es probable encontrar a los dos métodos cuando se revise código JavaScript.

2.10.1. Utilización de funciones

Una función simple

var greet = function(person, greeting) {
    var text = greeting + ', ' + person;
    console.log(text);
};
 
greet('Rebecca', 'Hello');  // muestra en la consola 'Hello, Rebecca'

Una función que devuelve un valor

var greet = function(person, greeting) {
    var text = greeting + ', ' + person;
    return text;
};
 
console.log(greet('Rebecca','hello'));

Una función que devuelve otra función

// la función devuelve 'Hello, Rebecca',
// la cual se muestra en la consola
var greet = function(person, greeting) {
    var text = greeting + ', ' + person;
    return function() { console.log(text); };
};
 
var greeting = greet('Rebecca', 'Hello');
greeting();  // se muestra en la consola 'Hello, Rebecca'

2.10.2. Funciones anónimas autoejecutables

Un patrón común en JavaScript son las funciones anónimas autoejecutables. Este patrón consiste en crear una expresión de función e inmediatamente ejecutarla. El mismo es muy útil para casos en que no se desea intervenir espacios de nombres globales, debido a que ninguna variable declarada dentro de la función es visible desde afuera.

Función anónima autoejecutable

(function(){
    var foo = 'Hello world';
})();
console.log(foo);   // indefinido (undefined)

2.10.3. Funciones como argumentos

En JavaScript, las funciones son ciudadanos de primera clase — pueden ser asignadas a variables o pasadas a otras funciones como argumentos. En jQuery, pasar funciones como argumentos es una práctica muy común.

Pasar una función anónima como un argumento

var myFn = function(fn) {
    var result = fn();
    console.log(result);
};
 
myFn(function() { return 'hello world'; }); // muestra en la consola 'hello world'

Pasar una función nombrada como un argumento

var myFn = function(fn) {
    var result = fn();
    console.log(result);
};
 
var myOtherFn = function() {
    return 'hello world';
};
 
myFn(myOtherFn);   // muestra en la consola 'hello world'