Pytanieprzechodzą w zmiennej lokalnej do funkcji zwrotnej
Jak funkcja zwrotna może zachować zmiennej lokalnej, z którego został on utworzony?
Prosty przykład
Tworzę odtwarzacz wideo. Będzie miał suwaki kontrolujące nasycenie, kontrast i odcień. Kiedy użytkownik bawi się suwakami, musi potwierdzić, który suwak został zmieniony i do jakiej wartości został zmieniony. Problem polega na tym, że nazwa suwaka jest lokalną zmienną z zakresu twórcy tego wywołania zwrotnego onChange. W jaki sposób to oddzwanianie może zachować nazwę suwaka?
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);
}
}
}
To dało mi błąd składni. – JoJo
Wierzę, że to jest poprawna rzecz: onChange: funkcja() { funkcja zwracania (wartość) alert { (elementy [i] + wartość); } } (elements [i]) – JoJo
Patrząc na to, myślałem, że autor był sprytny, pomijając oświadczenie zwrotne; Języki podobne do Lispa domyślnie zwracają ostatnie wyrażenie. Niestety javascript nie jest jednym z nich :( –