Wygląda na to, że większość interesujących i ważnych wskazówek została już wspomniana, więc ta jest tylko małym dodatkiem.
Mała wskazówka to funkcja jQuery.each (obiekt, wywołanie zwrotne) . Prawdopodobnie wszyscy używają funkcji jQuery.each (callback) do iteracji samego obiektu jQuery, ponieważ jest on naturalny. Funkcja narzędzia jQuery.each (obiekt, wywołanie zwrotne) iteruje obiekty i tablice. Przez długi czas jakoś nie widziałem, po co to może być, oprócz innej składni (nie mam nic przeciwko pisaniu wszystkich modnych pętli) i trochę się wstydzę, że dopiero niedawno uświadomiłem sobie jego główną siłę.
Chodzi o to, że ponieważ treść pętli w jQuery.each (obiekt, wywołanie zwrotne) jest funkcją , za każdym razem w pętli otrzymujesz nowy zakres, co jest szczególnie wygodne, gdy tworzysz zamknięcia w pętli.
Innymi słowy, typowym powszechnym błędem jest zrobienie czegoś takiego:
var functions = [];
var someArray = [1, 2, 3];
for (var i = 0; i < someArray.length; i++) {
functions.push(function() { alert(someArray[i]) });
}
Teraz, gdy wywołasz funkcje w functionstablicy, otrzymasz trzykrotnie alert z zawartością, undefinedktóra najprawdopodobniej nie jest tym, czego chciałeś. Problem polega na tym, że istnieje tylko jedna zmienna ii odnoszą się do niej wszystkie trzy zamknięcia. Po zakończeniu pętli końcowa wartość iwynosi 3 i someArrary[3]wynosi undefined. Możesz obejść ten problem, wywołując inną funkcję, która stworzy dla ciebie zamknięcie. Lub korzystasz z narzędzia jQuery, które zrobi to za Ciebie:
var functions = [];
var someArray = [1, 2, 3];
$.each(someArray, function(item) {
functions.push(function() { alert(item) });
});
Teraz, gdy wywołujesz funkcje, otrzymujesz trzy alerty o treści 1, 2 i 3, zgodnie z oczekiwaniami.
Ogólnie rzecz biorąc, nie można tego zrobić samodzielnie, ale dobrze jest mieć.