[ Pobierz całość w formacie PDF ]
nie schronienia dla tej zmiennej wewn trz pewnej funkcji i stworzenie dwóch dodatkowych
funkcji, które b d odczytywa y i ustawia y jej warto . Funkcja ustawiaj ca warto mo e
zawiera pewn logik , która nie pozwoli na nadanie zmiennej warto ci spoza dozwolonego
zbioru (jednak dla uproszczenia przyk adu pomi my walidacj ).
Funkcje dost powe powinny znale si wewn trz tej samej funkcji, która zawiera tajn zmienn ,
tak by dzieli y ten sam zakres:
var getValue, setValue;
(function() {
var secret = 0;
getValue = function(){
return secret;
};
98
Rozdzia 3. " Funkcje
setValue = function(v){
secret = v;
};
})()
Funkcja, która opakowuje zmienn i dwie funkcje dost powe, jest tutaj samowywo uj c si
funkcj anonimow . Definiuje ona setValue() i getValue() jako funkcje globalne, podczas
gdy zmienna secret pozostaje lokalna i nie jest dost pna bezpo rednio.
>>> getValue()
>>> setValue(123)
>>> getValue()
123
Iterator
Ostatni przyk ad domkni cia (a zarazem ostatni przyk ad w tym rozdziale) pokazuje wykorzy-
stanie domkni w celu osi gni cia funkcjonalno ci iteratora.
Wiesz ju , jak wykorzysta p tl do przej cia przez wszystkie elementy zwyk ej tablicy. Mo-
esz jednak napotka bardziej z o on struktur danych, w której kolejno elementów jest
okre lana przez bardziej z o ony zestaw regu . Wówczas skomplikowan logik rozwi zuj c
problem kto nast pny? umieszczasz w wygodnej w u yciu funkcji next(). Nast pnie wywo u-
jesz next() za ka dym razem, gdy chcesz pobra kolejn warto . Na potrzeby przyk adu wy-
korzystamy jednak zwyk tablic , a nie z o on struktur danych.
Oto funkcja inicjalizacyjna, która pobiera tablic , a tak e definiuje prywatny wska nik i, zaw-
sze wskazuj cy nast pny element w tablicy:
function setup(x) {
var i = 0;
return function(){
return x[i++];
};
}
Wywo anie funkcji setup() z parametrem b d cym tablic danych spowoduje automatyczne
utworzenie funkcji next().
>>> var next = setup(['a', 'b', 'c']);
Dalej czekaj nas sam przyjemno ci: wywo uj c wci t sam funkcj , przejdziemy przez
wszystkie elementy tablicy.
99
JavaScript. Programowanie obiektowe
>>> next();
"a"
>>> next();
"b"
>>> next();
"c"
Podsumowanie
W a nie sko czyli my podstawowy kurs poj zwi zanych z funkcjami. Przej cie do konceptów
programowania obiektowego oraz do wzorców wykorzystywanych w nowoczesnym progra-
mowaniu w j zyku JavaScript powinno by dla Ciebie proste. Do tej pory unikali my funkcjo-
nalno ci obiektowych, ale od tej chwili nie b dziemy ju tego robi . Powtórzmy materia przed-
stawiony w tym rozdziale. Omówione zosta y nast puj ce kwestie:
Definiowanie i wywo ywanie funkcji.
Parametry funkcji i ich elastyczno .
Funkcje wbudowane: parseInt(), parseFloat(), isNaN(), isFinite(), eval(),
a tak e cztery funkcje do kodowania i dekodowania adresów URL.
Zakres zmiennych: nie ma zakresu zwi zanego z nawiasami klamrowymi, istnieje
zakres funkcji, funkcje maj zakres leksykalny, obowi zuje zasada a cucha zakresów.
Funkcje to dane funkcj mo na przypisa zmiennej, z czego wynika szereg
ciekawych zastosowa , w ród których mo na wymieni :
prywatne funkcje i zmienne,
funkcje anonimowe,
wywo ania zwrotne,
samowywo uj ce si funkcje,
funkcje zmieniaj ce swoj definicj .
Domkni cia.
wiczenia
1. Napisz funkcj , która przekszta ca szesnastkow definicj koloru (np. niebieski
to "0000FF") na reprezentacj RGB (np. "rgb(0, 0, 255)"). Nazwij funkcj getRGB()
i przetestuj j za pomoc nast puj cego kodu:
100
Rozdzia 3. " Funkcje
>>> var a = getRGB("#00FF00");
>>> a;
"rgb(0, 255, 0)"
2. Co pojawi si w konsoli po uruchomieniu ka dej z poni szych linii kodu?
>>> parseInt(1e1)
>>> parseInt('1e1')
>>> parseFloat('1e1')
>>> isFinite(0/10)
>>> isFinite(20/0)
>>> isNaN(parseInt(NaN));
3. Co pojawi si w okienku alert() po wykonaniu nast puj cego kodu?
var a = 1;
function f() {
var a = 2;
function n() {
alert(a);
}
n();
}
f();
4. Wszystkie poni sze przyk ady spowoduj wy wietlenie "Uuu!". Czy potrafisz
powiedzie dlaczego?
4.1
var f = alert;
eval('f("Uuu!")');
4.2
var e;
var f = alert;
eval('e=f')('Uuu!');
4.3
(
function(){
return alert;
}
)()('Uuu!');
101 [ Pobierz całość w formacie PDF ]
zanotowane.pl doc.pisz.pl pdf.pisz.pl ocenkijessi.opx.pl
nie schronienia dla tej zmiennej wewn trz pewnej funkcji i stworzenie dwóch dodatkowych
funkcji, które b d odczytywa y i ustawia y jej warto . Funkcja ustawiaj ca warto mo e
zawiera pewn logik , która nie pozwoli na nadanie zmiennej warto ci spoza dozwolonego
zbioru (jednak dla uproszczenia przyk adu pomi my walidacj ).
Funkcje dost powe powinny znale si wewn trz tej samej funkcji, która zawiera tajn zmienn ,
tak by dzieli y ten sam zakres:
var getValue, setValue;
(function() {
var secret = 0;
getValue = function(){
return secret;
};
98
Rozdzia 3. " Funkcje
setValue = function(v){
secret = v;
};
})()
Funkcja, która opakowuje zmienn i dwie funkcje dost powe, jest tutaj samowywo uj c si
funkcj anonimow . Definiuje ona setValue() i getValue() jako funkcje globalne, podczas
gdy zmienna secret pozostaje lokalna i nie jest dost pna bezpo rednio.
>>> getValue()
>>> setValue(123)
>>> getValue()
123
Iterator
Ostatni przyk ad domkni cia (a zarazem ostatni przyk ad w tym rozdziale) pokazuje wykorzy-
stanie domkni w celu osi gni cia funkcjonalno ci iteratora.
Wiesz ju , jak wykorzysta p tl do przej cia przez wszystkie elementy zwyk ej tablicy. Mo-
esz jednak napotka bardziej z o on struktur danych, w której kolejno elementów jest
okre lana przez bardziej z o ony zestaw regu . Wówczas skomplikowan logik rozwi zuj c
problem kto nast pny? umieszczasz w wygodnej w u yciu funkcji next(). Nast pnie wywo u-
jesz next() za ka dym razem, gdy chcesz pobra kolejn warto . Na potrzeby przyk adu wy-
korzystamy jednak zwyk tablic , a nie z o on struktur danych.
Oto funkcja inicjalizacyjna, która pobiera tablic , a tak e definiuje prywatny wska nik i, zaw-
sze wskazuj cy nast pny element w tablicy:
function setup(x) {
var i = 0;
return function(){
return x[i++];
};
}
Wywo anie funkcji setup() z parametrem b d cym tablic danych spowoduje automatyczne
utworzenie funkcji next().
>>> var next = setup(['a', 'b', 'c']);
Dalej czekaj nas sam przyjemno ci: wywo uj c wci t sam funkcj , przejdziemy przez
wszystkie elementy tablicy.
99
JavaScript. Programowanie obiektowe
>>> next();
"a"
>>> next();
"b"
>>> next();
"c"
Podsumowanie
W a nie sko czyli my podstawowy kurs poj zwi zanych z funkcjami. Przej cie do konceptów
programowania obiektowego oraz do wzorców wykorzystywanych w nowoczesnym progra-
mowaniu w j zyku JavaScript powinno by dla Ciebie proste. Do tej pory unikali my funkcjo-
nalno ci obiektowych, ale od tej chwili nie b dziemy ju tego robi . Powtórzmy materia przed-
stawiony w tym rozdziale. Omówione zosta y nast puj ce kwestie:
Definiowanie i wywo ywanie funkcji.
Parametry funkcji i ich elastyczno .
Funkcje wbudowane: parseInt(), parseFloat(), isNaN(), isFinite(), eval(),
a tak e cztery funkcje do kodowania i dekodowania adresów URL.
Zakres zmiennych: nie ma zakresu zwi zanego z nawiasami klamrowymi, istnieje
zakres funkcji, funkcje maj zakres leksykalny, obowi zuje zasada a cucha zakresów.
Funkcje to dane funkcj mo na przypisa zmiennej, z czego wynika szereg
ciekawych zastosowa , w ród których mo na wymieni :
prywatne funkcje i zmienne,
funkcje anonimowe,
wywo ania zwrotne,
samowywo uj ce si funkcje,
funkcje zmieniaj ce swoj definicj .
Domkni cia.
wiczenia
1. Napisz funkcj , która przekszta ca szesnastkow definicj koloru (np. niebieski
to "0000FF") na reprezentacj RGB (np. "rgb(0, 0, 255)"). Nazwij funkcj getRGB()
i przetestuj j za pomoc nast puj cego kodu:
100
Rozdzia 3. " Funkcje
>>> var a = getRGB("#00FF00");
>>> a;
"rgb(0, 255, 0)"
2. Co pojawi si w konsoli po uruchomieniu ka dej z poni szych linii kodu?
>>> parseInt(1e1)
>>> parseInt('1e1')
>>> parseFloat('1e1')
>>> isFinite(0/10)
>>> isFinite(20/0)
>>> isNaN(parseInt(NaN));
3. Co pojawi si w okienku alert() po wykonaniu nast puj cego kodu?
var a = 1;
function f() {
var a = 2;
function n() {
alert(a);
}
n();
}
f();
4. Wszystkie poni sze przyk ady spowoduj wy wietlenie "Uuu!". Czy potrafisz
powiedzie dlaczego?
4.1
var f = alert;
eval('f("Uuu!")');
4.2
var e;
var f = alert;
eval('e=f')('Uuu!');
4.3
(
function(){
return alert;
}
)()('Uuu!');
101 [ Pobierz całość w formacie PDF ]