Funkcje - lomilowka.pl

Transkrypt

Funkcje - lomilowka.pl
Funkcje
Gdy mąż słyszy od żony idź do sklepu, kup ziemniaki, wówczas zaczyna wykonywać pewien zbiór
czynności. Za każdym razem, gdy usłyszy idź do sklepu, kup ziemniaki, wykona ten sam zbiór
czynności (heh - do czasu...). W javascript takie czynności ujęte w grupę to właśnie funkcje.
Funkcja jest wywoływana przez inną część skryptu (w realnym życiu przez żonę), a w momencie
jej wywołania zostaje wykonywany kod w niej zawarty. Ogólny wygląd funkcji ma następującą
postać:
function nazwa_funkcji() {
...kod funkcji
}
//lub
nazwa_funkcji = function() {
...kod funkcji anonimowej
}
Powyższy przykład wcale nie jest taki błachy. O różnicach w powyższych deklaracjach możesz
przeczytać tutaj. Póki co nie zawracaj sobie tym głowy.
W poniższym skrypcie deklarujemy funkcję o nazwie pisz:
function pisz() {
alert("To jest tekst zawarty w funkcji.");
}
pisz(); //odpalamy powyższą funkcję
Zadeklarowana funkcja może być wywoływana w dowolnym momencie skryptu. Możemy ją
wywoływać np. poprzez obsługę zdarzenia (np. onclick), poprzez sprawdzenie jakiegoś warunku, z
wnętrza innej funkcji itp.:
if (pokazacTekst == true) {
pisz();
}
</script>
Funkcje możemy także podpinać pod zdarzenia (które poznamy nieco później):
function pokaz() {
alert("Czemu to zrobiłeś!");
}
document.getElementById('guzik').onclick = function() {
pokaz()
}
Parametry (argumenty) funkcji
Częstokroć konieczne będzie przekazanie do funkcji określonych danych, które następnie zostaną
przez nią przetworzone.
Parametry przekazuje się wypisując je między nawiasami występującymi po nazwie funkcji:
function nazwa_funkcji(parametr_1, parametr_2, parametr_3...) {
parametr_1 + parametr_2 + parametr_3
}
Stwórzmy przykładową funkcję, która będzie sobie coś liczyła:
function licz(liczbaA, liczbaB) {
alert(liczbaA * liczbaB)
}
licz(3, 4); //wypisze 12
licz(7, 7); //wypisze 49
licz(100, 100); //wypisze 1000
</script>
Javascript nie wymaga od nas, abyśmy przekazywali do funkcji odpowiednią ilość argumentów.
Jeżeli nie zakładamy konkretnej liczby argumentów dla funkcji, wtedy możemy skorzystać z tablicy
arguments, dzięki której możliwe jest pobieranie poszczególnych parametrów:
//wypisz ilość przekazanych argumentów
function jakas() {
if (arguments.length) {
alert('Pierwszy przekazany argument to ' + arguments[0]);
alert('Liczba przekazanych argumentów to ' +
arguments.length);
}
}
Jeżeli powyższy kod wydaje ci się dziwny, nie martw się. Tablice poznasz w pużniej
Instrukcja return
Każda funkcja po zakończeniu działania zwraca jakąś wartość. Może to być jakiś tekst, liczba czy
wartość logiczna (prawda / fałsz).
Dzięki zastosowaniu instrukcji return możemy nakazać funkcji zwracanie określonej wartości.
Instrukcja ta równocześnie przerywa dalesz działanie funkcji:
function licz(liczba1, liczba2) {
var wynik = liczba1 + liczba2;
return wynik;
}
alert( licz(10,4) );
function sprawdz(tekst) {
if (tekst.length < 10) { //jeżeli długość tekstu jest mniejsza
od 10...
return false;
} else {
return true;
}
}
if (sprawdz('Przykładowy tekst')) {
alert('Tekst jest za krótki')
} else {
alert('Tekst jest wystarczająco długi');
}
Zauważyłeś jak w powyższym przykładzie zastosowaliśmy funkcję wraz z instrukcją "if"?
Jeżeli daną funkcję zastosujemy w instrukcji warunkowej if, wtedy zwracana wartość przez tą
funkcję zostanie automatycznie przekonwertowana do typu logicznego (true/false). Wszystkie
"pełne" wartości zamienią się na true, a puste (0, pusty string itp) zamienią się na false:
function sprawdz(tekst) {
return tekst;
}
if (sprawdz('testujemy')) alert('Funkcja zwróciła true')
if (sprawdz('')) alert('Funkcja zwróciła true')
Instrukcja return może też zwracać kilka wartości, które grupujemy w tablicę...
function zwrocTablice(L1,L2,L3) {
return [1,2,3] //zwracamy tablicę
}
var pierwsza = zwrocTablice()[0]; //pod zmienną podstawiamy
pierwszą wartość zwracaną przez funkcję
var druga = zwrocTablice()[1]; //...analogicznie...
var trzecia = zwrocTablice()[2];
alert(pierwsza + '|' + druga + '|' + trzecia); //wypisze 1|2|3
lub obiekt:
function zwrocObiekt(L1,L2,L3) {
return {
pierwsza: 1,
druga: 2,
trzecia: 3
}
}
var zwrotka = zwrocObiekt();
var pierwsza = zwrotka.pierwsza;
var druga = zwrotka.druga;
var trzecia = zwrotka.trzecia;
alert(pierwsza + '|' + druga + '|' + trzecia); //wypisze 1|2|3
Czekaj, czekaj. Nie tak prędko!
Do tego wszystkiego jeszcze dojdziemy.
Na chwilę obecną najważniejsze jest byś zapamiętał, że funkcja to zamknięty fragment kodu, który
możesz wywołać z "każdego miejsca". Ten fragment kodu może zwracać jakiś wynik, który bardzo
łatwo można wykorzystywać przy instrukcjach sprawdzających. I tyle.
Różnice w deklaracji funkcji
Na samym początku podałem dwie metody deklaracji funkcji.
function nazwa_funkcji() {
...kod funkcji
}
//lub
nazwa_funkcji = function() {
...kod funkcji anonimowej
}
Różnią się one nie tylko sposobem zapisu. Zadeklarowana w sposób pierwszy funkcja jest od razu
dostępna dla całego skryptu. Zadeklarowana w sposób drugi jest dostępna dopiero po całkowitym
przetworzeniu skryptu. Najlepiej pokazuje to poniższy przykład:
<script>
//Błąd
functionOne();
var functionOne = function() {
}
</script>
<script>
//Tutaj jest ok
functionTwo();
function functionTwo() {
}
</script>