Jestem absolutną nowicjuszką i po prostu przeczytałem to w: JavaScript: The Good Parts.Dlaczego nie zachęca się do tworzenia funkcji w pętli w JavaScript?
W rozdziale dotyczącym zakresu podano: "Ważne jest, aby zrozumieć, że funkcja wewnętrzna ma dostęp do rzeczywistych zmiennych funkcji zewnętrznych, a nie do kopii, aby uniknąć następującego problemu:." A następnie dwa poniższe przykłady wyglądać następująco:
// zły przykład
var add_the_handlers = function (nodes) {
var i;
for (i = 0; i < nodes.length; i += 1) {
nodes[i].onclick = function (e) {
alert(i);
};
}
};
// END ZŁY PRZYKŁAD
var add_the_handlers = function (nodes) {
var helper = function (i) {
return function (e) {
alert(i);
};
};
var i;
for (i = 0; i < nodes.length; i += 1) {
modes[i].onclick = helper(i);
}
};
Według autora Drugim przykładem jest lepsza, ponieważ nie robi” t używaj pętli wewnątrz funkcji, w przeciwnym razie może być marnotrawstwem obliczeniowym. Ale jestem zagubiony i nie wiem, co z nimi zrobić. Jak umieścić swoją teorię w rzeczywistym zastosowaniu? Czy ktoś ilustrujący te dwa przykłady może łączyć HTML?
Ważne, aby zrozumieć, że gdy zdarzenie wystąpi ... "i" nie będzie tym, co chcesz. Zobacz http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical -przyp. – charlietfl
Co rozumiesz przez "dwa przykłady łączą HTML"? –