closures, el amigo incomprendido de javascript

47
Closures El amigo incomprendido de Javascript.

Upload: pablo-rigazzi

Post on 10-Jul-2015

9.057 views

Category:

Education


1 download

DESCRIPTION

Presentación dada sobre Closures para el curso de Frontend de Mejorando.la Plataforma

TRANSCRIPT

Page 1: Closures, el amigo incomprendido de Javascript

ClosuresEl amigo incomprendido de Javascript.

Page 2: Closures, el amigo incomprendido de Javascript

FUNCIONES

Junto a los Objetosson actores principales.

Page 3: Closures, el amigo incomprendido de Javascript

FUNCIONES

Como Freddyproveen CONTEXTO.

Page 4: Closures, el amigo incomprendido de Javascript

FUNCIONESvar sabor = "Mermelada";

function crearPizza(rebanadas) { var sabor = "Margarita";

var helper = function() { var sabor = "Pepperoni";

console.log("La mia la quiero con " + sabor + " y " + rebanadas + " rebanadas");

}

console.log("Hacer una pizza se trata sobre todo del sabor " + sabor); helper();}crearPizza(8);

Page 5: Closures, el amigo incomprendido de Javascript

FUNCIONESvar sabor = "Mermelada";

function crearPizza(rebanadas) { var sabor = "Margarita";

var helper = function() { var sabor = "Pepperoni";

console.log("La mia la quiero con " + sabor + " y " + rebanadas + " rebanadas");

}

console.log("Hacer una pizza se trata sobre todo del sabor " + sabor); helper();}crearPizza(8);

CONTEXTO GLOBAL

Page 6: Closures, el amigo incomprendido de Javascript

FUNCIONESvar sabor = "Mermelada";

function crearPizza(rebanadas) { var sabor = "Margarita";

var helper = function() { var sabor = "Pepperoni";

console.log("La mia la quiero con " + sabor + " y " + rebanadas + " rebanadas");

}

console.log("Hacer una pizza se trata sobre todo del sabor " + sabor); helper();}crearPizza(8);

CONTEXTO GLOBAL

CONTEXTO crearPizza

Page 7: Closures, el amigo incomprendido de Javascript

FUNCIONESCONTEXTO GLOBAL

var sabor = "Mermelada";

function crearPizza(rebanadas) { var sabor = "Margarita";

var helper = function() { var sabor = "Pepperoni";

console.log("La mia la quiero con " + sabor + " y " + rebanadas + " rebanadas");

}

console.log("Hacer una pizza se trata sobre todo del sabor " + sabor); helper();}crearPizza(8);

CONTEXTO crearPizza

CONTEXTO helper

Page 8: Closures, el amigo incomprendido de Javascript

FUNCIONESCONTEXTO GLOBAL

var sabor = "Mermelada";

function crearPizza(rebanadas) { var sabor = "Margarita";

var helper = function() { var sabor = "Pepperoni";

console.log("La mia la quiero con " + sabor + " y " + rebanadas + " rebanadas");

}

console.log("Hacer una pizza se trata sobre todo del sabor " + sabor); helper();}crearPizza(8);

CONTEXTO crearPizza

CONTEXTO helper

Page 9: Closures, el amigo incomprendido de Javascript

FUNCIONESCONTEXTO GLOBAL

var sabor = "Mermelada";

function crearPizza(rebanadas) { var sabor = "Margarita";

var helper = function() { var sabor = "Pepperoni";

console.log("La mia la quiero con " + sabor + " y " + rebanadas + " rebanadas");

}

console.log("Hacer una pizza se trata sobre todo del sabor " + sabor); helper();}crearPizza(8);

CONTEXTO crearPizza

CONTEXTO helper

Page 10: Closures, el amigo incomprendido de Javascript

RESULTADOcrearPizza(8);Hacer una pizza se trata sobre todo del sabor Margarita

La mia la quiero con Pepperoni y 8 rebanadas

Javascript utiliza un Contexto Léxico.Utilizando el valor de las variables

al momento de definir la función/método.

Page 11: Closures, el amigo incomprendido de Javascript

Ahora, si. Closures

Page 12: Closures, el amigo incomprendido de Javascript

CLOSURES ES:

Una función que es evaluada a través del contexto léxico

en la que fue definida, junto a las variables libres

asociadas.

Page 13: Closures, el amigo incomprendido de Javascript

WAT?

Page 14: Closures, el amigo incomprendido de Javascript

CLOSURES ES:

Una declaración de función.

El contexto en la quefue declarada.

Page 15: Closures, el amigo incomprendido de Javascript

CLOSURES ES:function crearSaludo(nombre){ var meVes = "Si";

return function() { if(meVes) { console.log(meVes+' me ves, '+nombre); } }}var saludo = crearSaludo('pablo');

Page 16: Closures, el amigo incomprendido de Javascript

CLOSURES ES:function crearSaludo(nombre){ var meVes = "Si";

return function() { if(meVes) { console.log(meVes+' me ves, '+nombre); } }}var saludo = crearSaludo('pablo');

Page 17: Closures, el amigo incomprendido de Javascript

CLOSURES ES:function crearSaludo(nombre){ var meVes = "Si";

return function() { if(meVes) { console.log(meVes+' me ves, '+nombre); } }}var saludo = crearSaludo('pablo');

Page 18: Closures, el amigo incomprendido de Javascript

CLOSURES ES:function crearSaludo(nombre){ var meVes = "Si";

return function() { if(meVes) { console.log(meVes+' me ves, '+nombre); } }}var saludo = crearSaludo('Pablo');saludo();"Si me ves, Pablo".

Page 19: Closures, el amigo incomprendido de Javascript

CLOSURES ES:function crearSaludo(nombre){ var meVes = "Si";

return function() { if(meVes) { console.log(meVes+' me ves, '+nombre); } }}var saludo = crearSaludo('Christian');saludo();"Si me ves, Christian".

Page 20: Closures, el amigo incomprendido de Javascript

Y si devolvemos una función......que acepte parámetros?

Page 21: Closures, el amigo incomprendido de Javascript

CLOSURES ES:function crearSaludo(nombre){ return function(numero) { console.log( nombre+', me ves '+numero+' veces' ); }}var saludoPablo = crearSaludo('Pablo');var saludoChris = crearSaludo('Christian');

Page 22: Closures, el amigo incomprendido de Javascript

CLOSURES ES:function crearSaludo(nombre){ return function(numero) { console.log( nombre+', me ves '+numero+' veces' ); }}var saludoPablo = crearSaludo('Pablo');var saludoChris = crearSaludo('Christian');

Page 23: Closures, el amigo incomprendido de Javascript

CLOSURES ES:var saludoPablo = crearSaludo('Pablo');var saludoChris = crearSaludo('Christian');

saludoPablo(2);"Pablo, me ves 2 veces"

saludoPablo(7);"Pablo, me ves 7 veces"

saludoChris(10)"Christian, me ves 7 veces"

Page 24: Closures, el amigo incomprendido de Javascript

ZOMFG!:O

Page 25: Closures, el amigo incomprendido de Javascript

( Y esto para qué sirve? )

Page 26: Closures, el amigo incomprendido de Javascript

USANDO CLOSURES

● Fábrica de funciones● Ocultar código● Definir Módulos● Extender el lenguaje

(si da el tiempo, ejemplo)

Page 27: Closures, el amigo incomprendido de Javascript

ClosuresFABRICANDO FUNCIONES

Page 28: Closures, el amigo incomprendido de Javascript

FABRICANDO FUNCIONESfunction crearSaludo(nombre){ return function(numero) { console.log( nombre+', me ves '+numero+' veces' ); }}var saludoPablo = crearSaludo('Pablo');var saludoChris = crearSaludo('Christian');

Page 29: Closures, el amigo incomprendido de Javascript

FABRICANDO FUNCIONES

function resizer(size){ return function() { document.body.style.fontSize = size+'px'; }}var size14 = resizer(14);var size16 = resizer(16);var size18 = resizer(18);

Page 30: Closures, el amigo incomprendido de Javascript

FABRICANDO FUNCIONES

$('#size14').on('click', size14);$('#size16').on('click', size16);$('#size18').on('click', size18);

<a href="#" id="size14">14</a><a href="#" id="size16">16</a><a href="#" id="size18">18</a>

Page 31: Closures, el amigo incomprendido de Javascript

ClosuresOCULTAR CÓDIGO

Page 32: Closures, el amigo incomprendido de Javascript

PRIVACIDAD DEL CÓDIGOvar Contador = (function() { var _contador = 0; return { incrementar : function() { _contador++; }, decrementar : function() { _contador--; }, ver : function() { console.log(_contador); }, }})();

Page 33: Closures, el amigo incomprendido de Javascript

PRIVACIDAD DEL CÓDIGOvar Contador = (function() { var _contador = 0; return { incrementar : function() { _contador++; }, decrementar : function() { _contador--; }, ver : function() { console.log(_contador); }, }})();

INTERFAZ PUBLICA

Page 34: Closures, el amigo incomprendido de Javascript

PRIVACIDAD DEL CÓDIGOvar Contador = (function() { var _contador = 0; return { incrementar : function() { _contador++; }, decrementar : function() { _contador--; }, ver : function() { console.log(_contador); }, }})();

INTERFAZ PUBLICA

INTERFAZ PRIVADA

Page 35: Closures, el amigo incomprendido de Javascript

PRIVACIDAD DEL CÓDIGOContador.ver();0Contador.incrementar();Contador.incrementar();Contador.incrementar();Contador.ver();3Contador.decrementar();Contador.decrementar();Contador.ver();1

Page 36: Closures, el amigo incomprendido de Javascript

ClosuresDEFINIR MÓDULOS

Page 37: Closures, el amigo incomprendido de Javascript

Quizás lo más importanteque veamos sobre Closures

Page 38: Closures, el amigo incomprendido de Javascript

Lo bueno, es que ya lo vimos.

Page 39: Closures, el amigo incomprendido de Javascript

MÓDULOSvar Contador = (function() { var _contador = 0; return { incrementar : function() { _contador++; }, decrementar : function() { _contador--; }, ver : function() { console.log(_contador); }, }})();

Page 40: Closures, el amigo incomprendido de Javascript

Closure Anónimo

(function() { /*se ejecuta enseguida*/}())

Page 41: Closures, el amigo incomprendido de Javascript

MÓDULOSvar Contador = (function() { var _contador = 0; return { incrementar : function() { _contador++; }, decrementar : function() { _contador--; }, ver : function() { console.log(_contador); }, }})();

Page 42: Closures, el amigo incomprendido de Javascript

MIXINSvar Emergencias = (function($, mod2) { function privado_alertar() { $('#alerta').html('Socorro!'); mod2.notificar(); }

return { alertar : privado_alertar }})(jQuery, otroModulo);

Page 43: Closures, el amigo incomprendido de Javascript

EXTENSIÓN DE MÓDULOSvar Emergencias = (function(mod) { function llamar911() { window.location.href = "http://911.com"; }

mod.llamar911 = llamar911; return mod;

})(Emergencias || {});

Page 44: Closures, el amigo incomprendido de Javascript

Suficiente por ahora...

Page 45: Closures, el amigo incomprendido de Javascript

Diseño ModularPOTENCIA PARA APLICACIONES EN JAVASCRIPT

Page 46: Closures, el amigo incomprendido de Javascript

¿QUÉ ES ESTO?

Page 47: Closures, el amigo incomprendido de Javascript

MÓDULO

SANDBOX

MÓDULO

SANDBOX

MÓDULO

SANDBOX

NUCLEO DE LA APLICACIÓN

jQuery Backbone RequireJS Mediator.js Otras... más

Así debería versetu aplicación web