Miniatura
0

Javascript: Definir funciones, ese dolor de cabeza

Puede parecer una tontería, pero así, a botepronto, nos hemos plantado con 7 formas para definir una función en javascript.

Y claro, esto suscita algunas preguntas (o más bien, muchas), ¿no?

Vamos a intentar enumerarlas y ver las diferencias entre unas y otras, así a la hora de programar tenemos más claro cuál utilizar en cada momento, así como descartar las que nos parezcan inviables.

En nuestro estudio de todas estas formas para definir funciones buscamos mucho en la red, el post que más nos aclaró conceptos a este respecto, es el de Kangax (“Named function expressions”), aunque no fue el único… de hecho llegamos a él mediante este post, y este post (del gran EtnaSoft).

En fin, metámonos en harina:

Básicamente, una de las pruebas que hemos ejecutado sobre cada definición de función, es un typeof, para ver si nos devuelve function o no.

Ah, importante… antes de nada tenéis que leer bien el objeto Function, para llegar a entender algunas de las cosas que suceden al definir una función.

Modo 1

 

var function_1 = function function_1(){};
typeof function_1; // "function"
  • Puedes ejecutar function_1() antes de estar definida la función, es válido en todo el código
  • Si queremos definir diferentes versiones de una función en diferentes circunstancias, no podemos. Por ejemplo hacer que sea de una forma u otra mediante un if, etc…
  • No se pueden tener funciones anónimas, hay que darle un identificador obligatoriamente.

Modo 2

var function_2 = function(){};
typeof function_2; // "function"
  • No necesita nombres (Anónima), son opcionales.
  • En este caso debes ejecutar la función después de haberla definido, o no funcionará.

Modo 3

var function_3 = (function(){});
typeof function_3; // "function"
  • Usamos los grouping operators

Modo 4

var function_4 = function testing(){};
typeof function_4; // "function"
  • El nombre de la función sólo es accesible dentro de la función
  • Muy útil para utilizar recursividad
  • Muy útil para debuggear

Modo 5

var function_5 = (function(){
    return function(){};
})();
typeof function_5; // "function"

Modo 6

var function_6 = new Function();
typeof function_6; // "function"

// el uso sería algo similar a esto

var F = new Function('a', 'b', 'alert(a + ", " + b)');
F('foo', 'bar');  // 'foo, bar'
  • Este modo no es muy recomendado (incluso yo omitiría el “muy”)
  • Realmente puedes ejecutar sin el operador new

Modo 7 (object)

var function_7 = new function(){}; typeof function_7; // "object" // en uno de los posts nos ponen este ejemplo // que puede clarificar algo var Person = function(){ console.log(this); // Person }; var joe = new Person();
  • Crea un nuevo objeto y llama a la función anónima como su constructor.
  • Es interesante, aunque arriesgado… En este modo es en el que más podemos seguir investigando.

Recordáis en el anterior post (Javascript: Patrones de diseño en la creación de objetos) como dijimos “Javascript nos ofrece tantas formas de llegar al mismo sitio, que… o lo amas, o lo odias.”, pues a cosas así me refería ;-)

Deja un comentario

Una web debe ser...

Una web
debe ser

Usable

Un usuario aprende cada día. Navega y utiliza servicios web acostumbrándose a tener algunos elementos en determinado lugar y a utilizarlos de cierta manera. Una aplicación es usable si antes de hacer una determinada acción se puede predecir lo que sucederá.

Universal

El punto de mayor incidencia en la universalidad es que la aplicación sea multidispositivo. Poder visualizar desde cualquier dispositivo, lugar, y momento. Y además, disfrutar de una experiencia de usuario plena.

Encontrable

Hablamos de un conjunto de normas, pautas o guías por las que el usuario llega a la aplicación. Debe encontrar la aplicación, pero puede llegar mediante buscadores (SEO), también con recomendaciones, lecturas en medios, desde redes sociales (SMO), y otros métodos (SEM, etc)

Veloz

Como dijo David Cheriton: "Si es rápido y feo, lo utilizarán y te maldecirán, y si es lento, no lo utilizarán". Si una web es rápida repercute en menos gasto mensual, más satisfacción del usuario, y mayor posibilidad de conversión por parte del mismo.

Útil

Un sitio web tiene que ser útil en vistas al usuario para el que está concebido. Hay que entender la necesidad del usuario y poder ofrecer lo que busca. Contenidos, traducciones, herramientas, comparativas, utilidades, etcétera...

Cerrar