Funciones como valores
Hasta aqui, hemos discutido que las funciones son el mecanismo principal del ambito(scope) en JavaScript. Usted recordara la sintaxis tipica para declarar una funcion de la siguiente manera.
function foo() {
// ..
}
Aunque no sea obvio por la sintaxis, foo
es basicamente una variable que esta dentro del ambito externo que da una referencia a la funcion
que esta siendo declarada.
Esto tal vez suene como un extraño concepto a la primera, asi que tome un momento para considerarlo. No solo puede pasar un valor (argumento) a una funcion, si no que tambien una funcion puede ser un valor que es asignada a una variable, es pasada o retornada de otras funciones.
Como tal, el valor de una funcion debe ser pensada como una expresion, al igual que otro valor o expresion.
Considere:
var foo = function() {
// ..
};
var x = function bar(){
// ..
};
La expresion de la primera funcion asignada a la variable foo
es llamada anonima ya que esta no tiene un nombre
.
La segunda expresion es una funcion nombrada (bar
), aunque esta sea referenciada tambien con la asignacion a la variable x
. Las funciones nombradas son generalmente mas utilizadas, aunque las funciones anonimas son muy comunes.