SlideShare una empresa de Scribd logo
1 de 47
Descargar para leer sin conexión
ClosuresEl amigo incomprendido de Javascript.
FUNCIONES
Junto a los Objetos
son actores principales.
FUNCIONES
Como Freddy
proveen CONTEXTO.
FUNCIONES
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);
FUNCIONES
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 GLOBAL
FUNCIONES
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 GLOBAL
CONTEXTO crearPizza
FUNCIONES CONTEXTO 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
FUNCIONES CONTEXTO 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
FUNCIONES CONTEXTO 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
RESULTADO
crearPizza(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.
Ahora, si. Closures
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.
WAT?
CLOSURES ES:
Una declaración de función.
El contexto en la que
fue declarada.
CLOSURES ES:
function crearSaludo(nombre)
{
var meVes = "Si";
return function() {
if(meVes) {
console.log(meVes+' me ves, '+nombre);
}
}
}
var saludo = crearSaludo('pablo');
CLOSURES ES:
function crearSaludo(nombre)
{
var meVes = "Si";
return function() {
if(meVes) {
console.log(meVes+' me ves, '+nombre);
}
}
}
var saludo = crearSaludo('pablo');
CLOSURES ES:
function crearSaludo(nombre)
{
var meVes = "Si";
return function() {
if(meVes) {
console.log(meVes+' me ves, '+nombre);
}
}
}
var saludo = crearSaludo('pablo');
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".
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".
Y si devolvemos una función...
...que acepte parámetros?
CLOSURES ES:
function crearSaludo(nombre)
{
return function(numero) {
console.log(
nombre+', me ves '+numero+' veces'
);
}
}
var saludoPablo = crearSaludo('Pablo');
var saludoChris = crearSaludo('Christian');
CLOSURES ES:
function crearSaludo(nombre)
{
return function(numero) {
console.log(
nombre+', me ves '+numero+' veces'
);
}
}
var saludoPablo = crearSaludo('Pablo');
var saludoChris = crearSaludo('Christian');
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"
ZOMFG!
:O
( Y esto para qué sirve? )
USANDO CLOSURES
● Fábrica de funciones
● Ocultar código
● Definir Módulos
● Extender el lenguaje
(si da el tiempo, ejemplo)
Closures
FABRICANDO FUNCIONES
FABRICANDO
FUNCIONES
function crearSaludo(nombre)
{
return function(numero) {
console.log(
nombre+', me ves '+numero+' veces'
);
}
}
var saludoPablo = crearSaludo('Pablo');
var saludoChris = crearSaludo('Christian');
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);
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>
Closures
OCULTAR CÓDIGO
PRIVACIDAD DEL CÓDIGO
var Contador = (function() {
var _contador = 0;
return {
incrementar : function() {
_contador++;
},
decrementar : function() {
_contador--;
},
ver : function() {
console.log(_contador);
},
}
})();
PRIVACIDAD DEL CÓDIGO
var Contador = (function() {
var _contador = 0;
return {
incrementar : function() {
_contador++;
},
decrementar : function() {
_contador--;
},
ver : function() {
console.log(_contador);
},
}
})();
INTERFAZ PUBLICA
PRIVACIDAD DEL CÓDIGO
var Contador = (function() {
var _contador = 0;
return {
incrementar : function() {
_contador++;
},
decrementar : function() {
_contador--;
},
ver : function() {
console.log(_contador);
},
}
})();
INTERFAZ PUBLICA
INTERFAZ PRIVADA
PRIVACIDAD DEL CÓDIGO
Contador.ver();
0
Contador.incrementar();
Contador.incrementar();
Contador.incrementar();
Contador.ver();
3
Contador.decrementar();
Contador.decrementar();
Contador.ver();
1
Closures
DEFINIR MÓDULOS
Quizás lo más importante
que veamos sobre Closures
Lo bueno, es que ya lo vimos.
MÓDULOS
var Contador = (function() {
var _contador = 0;
return {
incrementar : function() {
_contador++;
},
decrementar : function() {
_contador--;
},
ver : function() {
console.log(_contador);
},
}
})();
Closure Anónimo
(function() {
/*se ejecuta enseguida*/
}())
MÓDULOS
var Contador = (function() {
var _contador = 0;
return {
incrementar : function() {
_contador++;
},
decrementar : function() {
_contador--;
},
ver : function() {
console.log(_contador);
},
}
})();
MIXINS
var Emergencias = (function($, mod2) {
function privado_alertar() {
$('#alerta').html('Socorro!');
mod2.notificar();
}
return {
alertar : privado_alertar
}
})(jQuery, otroModulo);
EXTENSIÓN DE MÓDULOS
var Emergencias = (function(mod) {
function llamar911() {
window.location.href = "http://911.com";
}
mod.llamar911 = llamar911;
return mod;
})(Emergencias || {});
Suficiente por ahora...
Diseño Modular
POTENCIA PARA
APLICACIONES EN JAVASCRIPT
¿QUÉ ES ESTO?
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 verse
tu aplicación web

Más contenido relacionado

Destacado (11)

Seo Workshop
Seo WorkshopSeo Workshop
Seo Workshop
 
vesseltracker.com Vom Kaffeeklatsch zur Business Intelligence in der Schifffa...
vesseltracker.com Vom Kaffeeklatsch zur Business Intelligence in der Schifffa...vesseltracker.com Vom Kaffeeklatsch zur Business Intelligence in der Schifffa...
vesseltracker.com Vom Kaffeeklatsch zur Business Intelligence in der Schifffa...
 
Mike Pritchett
Mike PritchettMike Pritchett
Mike Pritchett
 
Guns N Roses Patience (Live) (2)
Guns N  Roses   Patience (Live) (2)Guns N  Roses   Patience (Live) (2)
Guns N Roses Patience (Live) (2)
 
Ingenier A Grupis 8
Ingenier A Grupis 8Ingenier A Grupis 8
Ingenier A Grupis 8
 
Laboratori
LaboratoriLaboratori
Laboratori
 
Distinex 2550
Distinex 2550Distinex 2550
Distinex 2550
 
nueva presentación
nueva presentaciónnueva presentación
nueva presentación
 
Final Modulo1
Final Modulo1Final Modulo1
Final Modulo1
 
Estudio del comprador online en nicaragua
Estudio del comprador online en nicaraguaEstudio del comprador online en nicaragua
Estudio del comprador online en nicaragua
 
Panda
PandaPanda
Panda
 

Último

RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACIONRESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
amelia poma
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
Wilian24
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
EliaHernndez7
 

Último (20)

PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
 
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACIONRESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
 
Sesión de clase APC: Los dos testigos.pdf
Sesión de clase APC: Los dos testigos.pdfSesión de clase APC: Los dos testigos.pdf
Sesión de clase APC: Los dos testigos.pdf
 
Posición astronómica y geográfica de Europa.pptx
Posición astronómica y geográfica de Europa.pptxPosición astronómica y geográfica de Europa.pptx
Posición astronómica y geográfica de Europa.pptx
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024
 
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...
 
PP_Comunicacion en Salud: Objetivación de signos y síntomas
PP_Comunicacion en Salud: Objetivación de signos y síntomasPP_Comunicacion en Salud: Objetivación de signos y síntomas
PP_Comunicacion en Salud: Objetivación de signos y síntomas
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
Los avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesLos avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtuales
 
Power Point E. S.: Los dos testigos.pptx
Power Point E. S.: Los dos testigos.pptxPower Point E. S.: Los dos testigos.pptx
Power Point E. S.: Los dos testigos.pptx
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
FUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.pptFUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
 
Lecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigosLecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigos
 
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
SESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.docSESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.doc
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
 
Los dos testigos. Testifican de la Verdad
Los dos testigos. Testifican de la VerdadLos dos testigos. Testifican de la Verdad
Los dos testigos. Testifican de la Verdad
 
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLAACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
 
Louis Jean François Lagrenée. Erotismo y sensualidad. El erotismo en la Hist...
Louis Jean François Lagrenée.  Erotismo y sensualidad. El erotismo en la Hist...Louis Jean François Lagrenée.  Erotismo y sensualidad. El erotismo en la Hist...
Louis Jean François Lagrenée. Erotismo y sensualidad. El erotismo en la Hist...
 
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN PARÍS. Por JAVIER SOL...
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN  PARÍS. Por JAVIER SOL...ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN  PARÍS. Por JAVIER SOL...
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN PARÍS. Por JAVIER SOL...
 

Closures, el amigo incomprendido de Javascript