Preguntapase en la variable local a la función de devolución de llamada
¿Cómo puede una función de devolución de mantener una variable local de donde fue creado?
ejemplo simple
Estoy creando un reproductor de vídeo. Tendrá controles deslizantes para controlar la saturación, el contraste y el tono. Cuando el usuario juega con los controles deslizantes, necesita confirmar qué control deslizante cambió y en qué valor cambió. El problema es que el nombre del control deslizante es una variable local del alcance del creador de esta devolución de llamada onChange. ¿Cómo puede esta devolución de llamada conservar el nombre del control deslizante?
HTML
<div id="saturation">
<div class="track"></div>
<div class="knob"></div>
</div>
</div>
<div id="contrast">
<div class="track"></div>
<div class="knob"></div>
</div>
</div>
<div id="hue">
<div class="track"></div>
<div class="knob"></div>
</div>
</div>
JS
var elements = [
'saturation',
'contrast',
'gamma'
];
for(var i = 0; i < sliders.size(); i++) {
new Control.Slider(
$(elements[i]).down('.knob'),
$(elements[i]).down('.track'), {
onChange: function(value) {
// ERROR: elements[i] is undefined
alert(elements[i] + ' has been changed to ' + value);
}
}
}
Esto me dio un error de sintaxis. – JoJo
Creo que esto es lo correcto: onCambio: function() { return function (value) { alert (elementos [i] + value); } } (elementos [i]) – JoJo
Al ver esto, pensé que el autor estaba siendo inteligente al omitir la declaración de devolución; Los lenguajes tipo Lisp simplemente devuelven la última expresión por defecto. Lamentablemente, javascript no es uno de ellos :( –