Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

unidades:01_introduccion:04_repasojs [2014/09/06 11:14]
admin
unidades:01_introduccion:04_repasojs [2014/09/07 17:38] (actual)
admin [Closure]
Línea 28: Línea 28:
 persona.edad=34;​ persona.edad=34;​
  
 +</​sxh>​
 +
 +  * Mediante un constructor
 +<sxh js>
 +function Persona() {
 +  this.nombre="​Juan";​
 +  this.ape1="​Garcia";​
 +  this.edad=34;​
 +}
 +
 +var persona=new Persona();
 </​sxh>​ </​sxh>​
  
Línea 57: Línea 68:
 </​sxh>​ </​sxh>​
  
 +  * Mediante un constructor
 +<sxh js>
 +function Persona() {
 +  this.nombre="​Juan";​
 +  this.ape1="​Garcia";​
 +  this.edad=34;​
 +  this.getNombreCompleto=function() {
 +    return this.nombre+this.ape1;​
 +  };
 +}
  
 +var persona=new Persona();
 +</​sxh>​
  
 +===== Funciones =====
 +Hay unas formas de crear funciones
 +
 +
 +  * La clásica
 +<sxh js>
 +function sumar(a,b) {
 +  return a+b;
 +}
 +
 +var c=sumar(1,​2);​
 +</​sxh>​
 +
 +  * Como una variable
 +<sxh js>
 +var sumar=function (a,b) {
 +  return a+b;
 +}
 +
 +var c=sumar(1,​2);​
 +</​sxh>​
 +
 +  * Podemos hacer funciones que retornan funciones y llamarlas directamente.
 +
 +<sxh js>
 +function getFunction() {
 +
 +  var sumar=function (a,b) {
 +    return a+b;
 +  }
 +
 +  return sumar;
 +}
 +
 +var c=getFunction()(1,​2);​
 +</​sxh>​
 +
 +
 +===== Closure =====
 +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:
 +
 +<sxh js;​highlight:​[3,​6,​12]>​
 +function getFunction() {
 +
 +  var extra=100;
 +
 +  var sumar=function (a,b) {
 +    return a+b+extra;
 +  }
 +
 +  return sumar;
 +}
 +
 +var sumaClosure=getFunction();​
 +
 +var c=sumaClosure(1,​2);​
 +
 +</​sxh>​
 +
 +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:
 +
 +<sxh js;​highlight:​[1,​14,​18]>​
 +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);
 +</​sxh>​
  
unidades/01_introduccion/04_repasojs.1409994843.txt.gz · Última modificación: 2014/09/06 11:14 por admin
Ir hasta arriba
CC Attribution-Share Alike 3.0 Unported
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0