Saludos corillo,
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
Ahora me surge una duda de la forma como ustedes encapsularían. Si hago esto
Código HTML:
Ver original*{ cursor: default; }
div{
background-color: #eee;
margin-top: 2px;
text-align: center;
font-size: 20px;
}
div:hover{ background-color: #ccc; }
<div id="vegetable">vegetable
</div>
<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])
});
}
}
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í
Código HTML:
Ver original*{ cursor: default; }
div{
background-color: #eee;
margin-top: 2px;
text-align: center;
font-size: 20px;
}
div:hover{ background-color: #ccc; }
<div id="vegetable">vegetable
</div>
<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])
}
Se resuelve el problema porque estoy haciendo referencia al valor no a la variable persé. Mi pregunta es ¿qué forma ustedes recomendarían usar?