Sintaxis JavaScript: var = function


Hace ya tiempo que abandoné JavaScript por otros lenguajes “más potentes” pero la curiosidad y firebug para firefox me la han recordado.

Me llama la funcion las formas en las que se puede delcarar una funcion en javascript. Hay que decir que en este lenguaje, en el que ningun desarrollador cumple el estandar, todo es un poco de todo.

En los lenguajes debilmente tipados las variables (var a;) pueden ser entero, float, string o cualquier otra cosa, su tipado es tan debil que ni siquiera es necesario declarar las variables con la palabra reservada var.

La definicion de una funcion tipica en JS es la siguiente:

function product(a,b){
   return a*b;
}

document.write(product(5,6));

Como ya hemos dicho JS es debilmente tipado, y una variable puede ser de cualquier tipo. En JS pueden ser incluso funciones. Así que podemos indicar que una variable es igual a una funcion con su declaracion de parámetros y las instrucciones entre llaves:

product= function(a,b){
   return a*b;
}

document.write(product(5,6));

Podemos indicar que es una variable con var o no, funcionará de todos modos.

var product= function(a,b){
   return a*b;
}

document.write(product(5,6));

En JavaScript este concepto se puede abstraer más y le podemos asignar a una variable distintos componentes siendo estos funciones. Los que sepan C no les sesultará esto muy distinto a un struct pero con funciones, en definitiva un objeto como los de C++.

mat= {
   product: function(a,b){
      return a*b;
   }
}

document.write(mat.product(5,6));

Para incluir varios elementos los separamos por comas:

var mat= {
   product: function(a,b){
      return a*b;
   },
   sum: function(a,b){
      return a+b;
   },
}

document.write(mat.product(5,6));
document.write(mat.sum(5,6));

Conceptualmente esto tambien es un array, aunque un array siendo puristas se declararía con corchetes en este caso se declara con llaves y se asocia un nombre a cada posición. El siguiente codigo tambien funcionaria aunque la invocacion sea algo diferente:

var mat = [1,2,function(){return 3;}];
document.write(mat[0]);
document.write(mat[1]);
document.write(mat[2]());

Hay que tener cuidado a la hora de invocar a las funciones. Como vemos las del ejemplo anterior tienen parametros y al incluir los parentesis son invocadas como funciones, pero al ser una variable de cualquier tipo podemos invocar funciones, no como su resultado, si no como el texto que está escrito en ellas. En wl siguiente código vemos dos variables y una función dentro del objeto

var mat = {
a:1,
b:2,
c: function(){return 3;},
}

Ejecutando esta llamada

document.write(mat.b+" "+mat.a+" "+mat.c());

obtenemos:

2 1 3

Pero si el elemento c no es invocado como función, es decir sin parametros:

document.write(mat.b+" "+mat.a+" "+mat.c);

obtenemos:

2 1 function(){return 3;}

Así nos responde con el texto que está asociado al elemento c, ya que sin parámetros no lo considera una función. En determinados casos no es así, de modo que hay que tener cuidado cuando se invoca una función con parámetros o sin ellos.

No es cuestion de ir declarando objetos por gusto, pero esto si que nos puede dar mucha potencia a la hora de montarnos una biblioteca potente donde todo esté empaquetado en un objetos. Por ejemplo para las comunicaciones asincronas (Ajax) lo suyo es montarse un objeto que haga todo lo que queramos y despues llamarlo desde Html. Hay que decri que para el caso de Ajax ya hay muchas bibliotecas hechas, así que si te quieres hacer una por practicar está bien, pero lo usual es utilizar una ya hecha y muy provada.

Strings en JavaScrit: métodos Quirksmode.org

Como consulta: muy básico w3schools.com

Al final en JavaScript parace que todo es un poco todo a la vez, por eso para programar directamente en JS hay que aceptar que según la vision del programador las funciones y las variables a veces son lo mismo.

, ,

  1. No hay Comentarios
(No será publicado)