Estoy preparando un material (tutorial) y en ese material requiero encapsular ciertos valores. Para los que no conocen el termino de closure o encapsulating, pueden leer estos materiales
- http://en.wikipedia.org/wiki/Closure_(computer_science)
- http://reprog.wordpress.com/2010/02/...lly-explained/
- http://www.bennadel.com/blog/1482-A-...ry-Context.htm (recomendado por su forma gráfica de mostrar como funciona)
Código HTML:
Siempre me traerá el último valor, ya que de por sí estoy haciendo referencia a la variable directamente y no al valor, por eso me trae siempre el último valor. Pero si lo hiciera asíVer original
<html> <head> <style> *{ cursor: default; } div{ background-color: #eee; margin-top: 2px; text-align: center; font-size: 20px; } div:hover{ background-color: #ccc; } </style> </head> <body> </style> <script type="text/javascript"> var divs = ['foo', 'bar', 'baz', 'candy', 'fruits', 'vegetable']; for(var i in divs){ var elem = document.getElementById(divs[i]) if (elem.addEventListener){ elem.addEventListener('click', function(e){ alert(divs[i]) }, false); }else if (elem.attachEvent){ elem.attachEvent("onclick", function(e){ alert(divs[i]) }); } } </script> </body> </html>
Código HTML:
Se resuelve el problema porque estoy haciendo referencia al valor no a la variable persé. Mi pregunta es ¿qué forma ustedes recomendarían usar? Ver original
<html> <head> <style> *{ cursor: default; } div{ background-color: #eee; margin-top: 2px; text-align: center; font-size: 20px; } div:hover{ background-color: #ccc; } </style> </head> <body> </style> <script type="text/javascript"> var divs = ['foo', 'bar', 'baz', 'candy', 'fruits', 'vegetable']; for(var i in divs){ (function(eDiv){ var elem = document.getElementById(eDiv) if (elem.addEventListener){ elem.addEventListener('click', function(e){ alert(eDiv) }, false); }else if (elem.attachEvent){ elem.attachEvent("onclick", function(e){ alert(eDiv) }); } })(divs[i]) } </script> </body> </html>
de todos modos, lo que queria compartir era que en teoria el codigo esta bien. en javascript, para crear un closure se necesita de un scope. dichos scopes solamente se pueden crear con funciones. de modo que la forma en que lo has hecho es correcta.
¿se puede saber donde me dejastes Humacao?



