Na przykład jeśli chcemy zareagować na zmianę w polu "#name":
jQuery("#name").change(function(){
//tu jakieś operacje
});
Wszystko fajnie do momentu, gdy te wewnętrzne funkcje nie zaczynają się rozrastać i ciągnąć za sobą nowe funkcje. Kod staje się całkowicie nieczytelny i bałagan z każdą chwilą się pogłębia.Częściowym rozwiązaniem jest osadzanie funkcji nazwanych jako parametru.
W poprzednim przykładzie funkcję bezimienną moglibyśmy zastąpić nazwaną, jak choćby:
function makeChanges() {
//tu kod z funkcji nienazwanej
}
którą osadzamy w poprzednim przykładzie:jQuery("#name").change(makeChanges);Zwróć uwagę na brak nawiasów!
Taaa... wygląda nieźle. Wygląda nieźle, ale tylko do momentu, w którym musimy użyć funkcji makeChanges() w jakimś innym miejscu kodu. Po to przecież ją wyekstrahowaliśmy (pamiętasz zasadę DRY?). Potrzebny wtedy jakiś parametr, a najczęściej dwa... albo i trzy.
Niestety coś takiego w sposób prosty nie zadziała:
jQuery("#name").change(makeChanges(paramOne, paramTwo));Aby zadziałało funkcja makeChanges() musi zwrócić funkcję gdyż tego wymaga jQuery. Zróbmy więc tak:
function makeChanges(paramOne, paramTwo) {
return function() {
// tu dopiero kod z funkcji nienazwanej
// z wykorzystaniem parametru paramOne
// i parametru paramTwo
}
}
Teraz działa!Miłej zabawy :-)
Działa dokładnie tak samo gdy funkcja makeChanges nie zwraca funkcji, a jej użycie wygląda tak:
OdpowiedzUsuń$("#name").change(function()makeChanges(paramOne, paramTwo)});