<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://dosideas.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Closures_o_Clausuras_de_Javascript</id>
		<title>Closures o Clausuras de Javascript - Historial de revisiones</title>
		<link rel="self" type="application/atom+xml" href="https://dosideas.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Closures_o_Clausuras_de_Javascript"/>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Closures_o_Clausuras_de_Javascript&amp;action=history"/>
		<updated>2026-05-09T16:12:10Z</updated>
		<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Closures_o_Clausuras_de_Javascript&amp;diff=5794&amp;oldid=prev</id>
		<title>201.251.182.130: Página creada con 'Category:JavaScript ==Closures o Clausuras de JavaScript==  El concepto es &quot;clausurar&quot; el contexto en el que se ejecuta una funcion, a esta funcion se la denomina ''Clos…'</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Closures_o_Clausuras_de_Javascript&amp;diff=5794&amp;oldid=prev"/>
				<updated>2011-06-28T15:53:06Z</updated>
		
		<summary type="html">&lt;p&gt;Página creada con &amp;#039;&lt;a href=&quot;/wiki/Categor%C3%ADa:JavaScript&quot; title=&quot;Categoría:JavaScript&quot;&gt;Category:JavaScript&lt;/a&gt; ==Closures o Clausuras de &lt;a href=&quot;/wiki/JavaScript&quot; title=&quot;JavaScript&quot;&gt;JavaScript&lt;/a&gt;==  El concepto es &amp;quot;clausurar&amp;quot; el contexto en el que se ejecuta una funcion, a esta funcion se la denomina &amp;#039;&amp;#039;Clos…&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:JavaScript]]&lt;br /&gt;
==Closures o Clausuras de [[JavaScript]]==&lt;br /&gt;
&lt;br /&gt;
El concepto es &amp;quot;clausurar&amp;quot; el contexto en el que se ejecuta una funcion, a esta funcion se la denomina ''Closure''.&lt;br /&gt;
&lt;br /&gt;
===Como funcionan?===&lt;br /&gt;
&lt;br /&gt;
En donde se encuentra una funcion dentro de otra, la funcion interna tiene acceso a las variables de la funcion externa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code javascript&amp;gt;&lt;br /&gt;
function externa(x) {&lt;br /&gt;
  var variable = 3;&lt;br /&gt;
&lt;br /&gt;
  function interna(y) {&lt;br /&gt;
    alert(x + y + (++variable));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  interna(10);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
externa(2);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto siempre dará un alert de 16, porque ''interna()'' puede acceder a la ''x'' que fue definida como argumento en ''externa()'' y tambien puede acceder a ''variable'' de ''externa()''.&lt;br /&gt;
&lt;br /&gt;
Eso '''NO''' es un ''closure''. Un ''closure'' es cuando se retorna la funcion interna y esta misma cierra sus variables externas antes de salir.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code javascript&amp;gt;&lt;br /&gt;
function externa(x) {&lt;br /&gt;
  var variable = 3;&lt;br /&gt;
&lt;br /&gt;
  return function (y) {&lt;br /&gt;
    alert( x + y + (++variable) );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
var interna = externa(2); // interna es ahora un closure.&lt;br /&gt;
interna(10);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tambien retornará un alert de 16, porque ''interna()'' todavia puede referenciar a ''x'' y ''variable'', aunque ya no este directamente dentro del alcance de ''externa()''.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, como ''variable'' todavía esta siendo manejada dentro del closure ''interna()'', va a continuar incrementandose cada vez que ''interna()'' sea llamada, a diferencia del ejemplo anterior.&lt;br /&gt;
&lt;br /&gt;
===Importante cuando trabajamos con Closures===&lt;br /&gt;
&lt;br /&gt;
En el último ejemplo ''x'' es un número literal y como todo literal en javascript, cuando se llame a ''externa()'' el numero ''x'' es copiado en la funcion como argumento.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, javascript siempre utiliza referencias cuando trabaja con Objetos. Por ejemplo, si llamamos a ''externa()'' con un objeto, '''el closure que retornará estará referenciado al objeto original'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code javascript&amp;gt;&lt;br /&gt;
function externa(x) {&lt;br /&gt;
  var variable = 3;&lt;br /&gt;
&lt;br /&gt;
  return function (y) {&lt;br /&gt;
    alert(x + y + variable);&lt;br /&gt;
    x.unaProp = x.unaProp ? x.unaProp + 1 : 1;&lt;br /&gt;
    alert(x.unaProp);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var edad = new Number(2);&lt;br /&gt;
var interna = externa(edad); // interna es una closure referenciando al objeto edad.&lt;br /&gt;
interna(10);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como es esperado, cada llamada a ''interna()'' incrementará ''x.unaProp''. Lo que puede no ser esperado es que ''x'' está referenciando al mismo objeto que guarda ''edad'', luego de un par de llamadas a ''interna()'' ''edad.unaProp'' valdrá 2.&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [http://es.wikipedia.org/wiki/JavaScript JavaScript en la Wikipedia]&lt;br /&gt;
* [http://www.theserverside.com/tt/articles/article.tss?l=OOJavaScriptDemonstrated Conceptos y operaciones básicas]&lt;br /&gt;
&lt;br /&gt;
==Fuente==&lt;br /&gt;
* [http://stackoverflow.com/questions/111102/how-do-javascript-closures-work Stackoverflow: How do JavaScript closures work?]&lt;/div&gt;</summary>
		<author><name>201.251.182.130</name></author>	</entry>

	</feed>