Aunque supongo que ya sabes JavaScript voy a repasar de forma rápida alguna cosas que quizás te venga bien recordar.
Crear un objeto en javaScript es tan sencillo como:
var persona={};
Si queremos añadirle propiedades con valores podemos hacerlo de varias formas:
var persona={ nombre:"Juan", ape1:"Garcia", edad:34 }
var persona={}; persona.nombre="Juan"; persona.ape1="Garcia"; persona.edad=34;
function Persona() { this.nombre="Juan"; this.ape1="Garcia"; this.edad=34; } var persona=new Persona();
También les podemos añadir funciones:
var persona={ nombre:"Juan", ape1:"Garcia", edad:34, getNombreCompleto:function() { return this.nombre+this.ape1; } }
var persona={}; persona.nombre="Juan"; persona.ape1="Garcia"; persona.edad=34; persona.getNombreCompleto=function() { return this.nombre+this.ape1; };
function Persona() { this.nombre="Juan"; this.ape1="Garcia"; this.edad=34; this.getNombreCompleto=function() { return this.nombre+this.ape1; }; } var persona=new Persona();
Hay unas formas de crear funciones
function sumar(a,b) { return a+b; } var c=sumar(1,2);
var sumar=function (a,b) { return a+b; } var c=sumar(1,2);
function getFunction() { var sumar=function (a,b) { return a+b; } return sumar; } var c=getFunction()(1,2);
Ahora vamos a ver una de las cosas mas raras para un programador Java. Una closure. Inicialmente es como un simple puntero a una función, algo como lo que ya existía en C, pero hay algo más. Veamos el siguiente ejemplo:
function getFunction() { var extra=100; var sumar=function (a,b) { return a+b+extra; } return sumar; } var sumaClosure=getFunction(); var c=sumaClosure(1,2);
Al ejecutar el ejemplo , la variable c
vale 103. Igual no te parece raro pero cuando se está ejecutando la función sumaClosure
,ya no debería existir la variable extra
pero si que existe y la función sumaClosure
aun puede usar su valor aun cuando ya no estamos dentro de getFunction
. Es es realmente una closure. Una función que se ejecuta en el contexto de donde se creo no donde está ahora. Puede parecer que esto es poco útil, pero con tanta llamada asíncrona en JavaScript es realmente útil.
El ejemplo lo podemos liar un poco mas añadiendo nuevas variables llamadas extra
y veremos como no afecta al resultado, éste sigue siendo 103:
var extra=1000; function getFunction() { var extra=100; var sumar=function (a,b) { return a+b+extra; } return sumar; } extra=1100; var fn=getFunction(); extra=1200; var c=fn(1,2);