Tipos de Función en JavaScript

Tipos de Función en JavaScript

En el anterior apartado vimos una de las formas de definir funciones en JavaScript, esta se conoce como Declaración de Función, donde lo que hacemos es asignarle un nombre a la función. Pues bien, este nombre que utilizamos para la asignación es solo un puntero que tiene como objetivo el objeto function. En este apartado veremos cómo usar las funciones como objetos.

Cualquier valor en Javascript que no sea del tipo primitivo es un objeto y esta regla incluye a las funciones, que al ser considerados objetos cuentan con propiedades y métodos que extienden su uso.

Veamos el siguiente ejemplo donde declaramos la función sumar():

function sumar( a, b ) {
   return a + b;
}

Que es equivalente a la siguiente sintaxis conocida como Expresión de Función donde lo que hacemos es declarar una variable e inicializarla con una función:

var sumar = function( a , b ) {
   return a + b;
};

Como puedes notar no hay un nombre que siga a la palabra reservada function por que en la Expresión de Función esta se crea de forma  anónima y es asignada a una variable que podremos hacer referencia de esta en cualquier parte de nuestro programa.

var resultado = sumar;
// Resto del programa...
console.log(resultado(550,327));
877

Ahora tenemos las variables resultado y sumar apuntando a la misma función y devolviendo un único resultado.

console.log(resultado);
console.log(sumar);
function(a, b) {
  return a + b;
}
function(a, b) {
  return a + b;
}

Expresión de función y la elevación (hoisting)

Ya hemos visto el concepto de Hoisting anteriormente :

La elevación (Hoisting) es el mecanismo en el cual el motor interprete de JavaScript mueve todas las declaraciones de variables al principio del ámbito al que esta pertenece, ya sea de una función o de alcance global.

Pues bien, todas las declaraciones de funciones en JavaScript son izadas o elevadas, lo contrario a lo que pasa cuando declaramos una expresión de función, estas no son izadas. Veamos un ejemplo:

saludar(); // llamamos la función
//....
function saludar() { // Declaramos la función
  console.log('Hola mundo!!');
}

El anterior script funciona perfectamente porque la expresión saludar() se eleva. En otras palabras, su declaración se mueve a la parte superior en la fase de compilación que hace el interprete de JavaScript.

Al intentar hacer lo mismo con una expresión de función, esta nos dará un error.

saludar(); // llamamos la función
//....
var saludar = function() { // Declaramos la función
  console.log('Hola mundo!!');
}
"TypeError: saludar is not a function"

Propiedades de las Funciones :

El objeto function cuenta con dos propiedades: length y prototype :

  1. length : determina la cantidad de argumentos especificados en la declaración de la función.
  2. prototype Es la encargada de apuntar al objeto function

Veamos el siguiente ejemplo:

var saludar = function( a, b ) {
  a = 10;
  b = 20;
}
console.log(saludar.length);
console.log(saludar.prototype);
2
[object Object] { ... }

Como puedes notar en el ejemplo anterior, la función saludar(); acepta dos argumentos acepta dos argumentos, por lo tanto, la propiedad length devuelve 2. y la propiedad prototype devuelve el tipo del objeto referenciado, pero de este tema hablaremos mas adelante.

avatar