47
Closures El amigo incomprendido de Javascript.

Closures, el amigo incomprendido de Javascript

Embed Size (px)

DESCRIPTION

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

Citation preview

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