Uso de funciones en javascript
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 algúnas maneras

Declaración de una función

function foo() { /* realizar algo */ }
Declaración de una función nombrada

var foo = function() { /* realizar algo */ }
Es preferible el método de función nombrada debido a determinadas profundas razones técnicas. Igualmente es posible descubrir a los dos métodos cuando se revise código JavaScript.

Utilización de Funciones

Una función simple

var greet = function(person greeting) {
var text = greeting + ' ' + person
console.log(text)
}


greet('Rebecca' 'Hello') // presenta 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')) // la función devuelve 'Hello Rebecca'
// la cual se presenta en la consola
Una función que devuelve otra función

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


var greeting = greet('Rebecca' 'Hello')
greeting() // se presenta en la consola 'Hello Rebecca'
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 quiere intervenir lugares de nombres generales debido a que ninguna variable declarada dentro de la función es visible desde fuera.

Función anónima autoejecutable

(function(){
var foo = 'Hello world'
})()


console.log(foo) // indefinido (undefined)
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' }) // presenta 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) // presenta en la consola 'hello world'