![Page 1: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/1.jpg)
Tecnologie lato Client:Tecnologie lato Client:JavascriptJavascript
© 2005 Stefano Clemente
I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto in italiano:© 2002 Prentice Hall H. M. Deitel, P. J. Deitel, T. R. Nieto Internet & World Wide Web – How To Program (Second Edition)
Stefano [email protected]
![Page 2: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/2.jpg)
11 Ottobre 2005 Stefano Clemente 2
Riferimenti bibliograficiRiferimenti bibliografici
• H. M. Deitel, P. J. Deitel, T. R. Nieto Internet & World Wide Web – How To Program (Second Edition)ed. Prentice Hall 2002 Capitoli 7, 8, 9, 10, 11, 12
![Page 3: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/3.jpg)
11 Ottobre 2005 Stefano Clemente 3
IntroduzioneIntroduzione
• JavaScript
−Linguaggio di scripting per un approccio disciplinato alla realizzazione di programmi utili per migliorare le funzionalità e la visualizzazione delle pagine Web
−È il linguaggio client-side “de facto” per le applicazioni basate sul Web
−L’uso di JavaScript non è destinato solo allo scripting lato client, ma è utilizzato anche dal lato server per la creazione di script più complessi
![Page 4: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/4.jpg)
11 Ottobre 2005 Stefano Clemente 4
Esempio 1Esempio 1
![Page 5: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/5.jpg)
11 Ottobre 2005 Stefano Clemente 5
Esempio 2Esempio 2
![Page 6: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/6.jpg)
11 Ottobre 2005 Stefano Clemente 6
Esempio 3Esempio 3
![Page 7: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/7.jpg)
11 Ottobre 2005 Stefano Clemente 7
Esempio 4Esempio 4
N.B. - JavaScript è case-sensitiveN.B. - JavaScript è case-sensitive
![Page 8: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/8.jpg)
11 Ottobre 2005 Stefano Clemente 8
Esempio 4Esempio 4
![Page 9: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/9.jpg)
11 Ottobre 2005 Stefano Clemente 9
Struttura di un programma Struttura di un programma JavaScriptJavaScript• Un programma JavaScript deve essere definito nella
parte di intestazione <head></head> (X)HTML• Deve essere racchiuso tra i tag <script></script>• All’interno di questi tag, si può ancora racchiudere in
una sezione di commento HTML per evitare che un browser che non è in grado di eseguirlo lo visualizzi nella pagina
• In sostanza la struttura è<script language="Javascript“
type="text/javascript"><!--
{dichiarazioni e statement JavaScript}//--></script>
![Page 10: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/10.jpg)
11 Ottobre 2005 Stefano Clemente 10
VariabiliVariabili
• Locazioni di memoria in cui memorizzare dati
• Devono essere dichiarate con uno statement varvarvarvar <nome_variabile>;varvar <nome_variabile_1> , … , <nome_variabile_n>;
• Una variabile può essere inizializzata nello stesso statement di definizionevarvar <nome_variabile> = <valore>; varvar <nome_variabile_1> = <valore1> ,
… , <nome_variabile_n> = <valoren>;
![Page 11: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/11.jpg)
11 Ottobre 2005 Stefano Clemente 11
VariabiliVariabili• Il tipo di dato della variabile è definito dal valore che
le viene assegnato• I valori possono essere di tipo
− caratteri o stringhe− interi− virgola mobile− date− booleani
• false = false, 0, null, NaN, “”false, 0, null, NaN, “”• true = qualsiasi altro valorequalsiasi altro valore
• Il nome di una variabile può essere una qualsiasi sequenza di caratteri alfa-numerici, caratteri di sottolineatura (_) e dollaro ($), purché non cominci per un numero e non contenga spazi
![Page 12: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/12.jpg)
11 Ottobre 2005 Stefano Clemente 12
Operazioni sulle variabiliOperazioni sulle variabili
• È possibile−interrogare le variabili per conoscerne il valore−eseguire l’operazione di assegnamento
<variabile> = <espressione>;<variabile> = <espressione>;• l’espressione alla destra dello statement viene valutata• il valore risultante diventa il nuovo valore assegnato alla
variabile
−ESEMPI• a = 12 + 3;a = 12 + 3;• a = a + 3; a = a + 3; ≡ ≡ a += 3;a += 3;• a = a + 1; a = a + 1; ≡≡ a += 1; a += 1; ≡≡ a++; a++; ≡≡ ++a++a;
attenzione: in alcuni casi a++;a++; ≠≠ ++a;++a;
![Page 13: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/13.jpg)
11 Ottobre 2005 Stefano Clemente 13
Esempio 5Esempio 5
![Page 14: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/14.jpg)
11 Ottobre 2005 Stefano Clemente 14
OperatoriOperatoriOperatoreOperatore TipoTipo PrioritàPriorità
() [] .() [] . parentesi/array/punto
++ -- !++ -- ! incremento/decremento/NOT
* / %* / % moltiplicazione/divisione/modulo
+ -+ - addizione/sottrazione
< <= > >=< <= > >= relazionali
== !=== != uguaglianza
&&&& AND
|||| OR
?:?: condizionale
= += -= *= /= = += -= *= /= %=%=
assegnamento
![Page 15: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/15.jpg)
11 Ottobre 2005 Stefano Clemente 15
OggettiOggetti• JavaScript è un linguaggio di programmazione Object-
based• Il nostro mondo è fatto di oggetti• Gli oggetti hanno
− attributi – es. colore, peso, forma− comportamenti – es. una palla rotola, rimbalza, si gonfia, ecc.
• Nel caso dei linguaggi di programmazione− gli oggetti sono parti di codice standardizzate e
intercambiabili che consentono il riutilizzo del codice− proprietà – corrispondono agli attributi dell’oggetto e sono le
variabili e le costanti dell’oggetto− metodi – corrispondono ai comportamenti e sono le parti di
codice richiamabili dall’esterno vale a dire le funzioni dell’oggetto
![Page 16: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/16.jpg)
11 Ottobre 2005 Stefano Clemente 16
L’oggetto Math: i metodiL’oggetto Math: i metodiMetodo Descrizione Esempio
abs( x ) Valore assoluto di x abs( 7.2 ) = 7.2 abs( 0.0 ) = 0.0 abs( -5.6 ) = 5.6
ceil( x ) Arrotonda x per eccesso ceil( 9.2 ) = 10.0 ceil( -9.8 ) = -9.0
cos( x ) Coseno di x (x in radianti) cos( 0.0 ) = 1.0 exp( x ) Metodo esponenziale ex exp( 1.0 ) = 2.71828
exp( 2.0 ) = 7.38906 floor( x ) Arrotonda x per difetto floor( 9.2 ) = 9.0
floor( -9.8 ) = -10.0 log( x ) Logaritmo naturale di x (base e) log( 2.718282 ) = 1.0
log( 7.389056 ) = 2.0 max( x, y ) Massimo tra x e y max( 2.3, 12.7 ) = 12.7
max( -2.3, -12.7 ) = -2.3
min( x, y ) Minimo tra x e y min( 2.3, 12.7 ) = 2.3 min( -2.3, -12.7 ) = -12.7
pow( x, y ) X alla y (xy) pow( 2.0, 7.0 ) = 128.0 pow( 9.0, .5 ) = 3.0
round( x ) Arrotondamento di x round( 9.75 ) = 10 round( 9.25 ) = 9
sin( x ) seno di x (x in radianti) sin( 0.0 ) = 0.0 sqrt( x ) Radice quadrata di x sqrt( 900.0 ) = 30.0
sqrt( 9.0 ) = 3.0 tan( x ) Tangente di x (x in radianti) tan( 0.0 ) = 0.0
![Page 17: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/17.jpg)
11 Ottobre 2005 Stefano Clemente 17
L’oggetto Math: le proprietàL’oggetto Math: le proprietà
Costante Descrizione Valore Math.E Costante di Eulero (e) Circa 2.718
Math.LN2 Logaritmo naturale di 2 (in base e) Circa 0.693
Math.LN10 Logaritmo naturale di 10 (in base e) Circa 2.302
Math.LOG2E Logaritmo in base 2 della costante di Eulero Circa 1.442
Math.LOG10E Logaritmo in base 10 della costante di Eulero Circa 0.434
Math.PI Circa 3.141592653589793
Math.SQRT1_2 Radice quadrata di 0.5. Circa 0.707
Math.SQRT2 Radice quadrata di 2.0. Circa 1.414
![Page 18: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/18.jpg)
11 Ottobre 2005 Stefano Clemente 18
L’oggetto String: i metodiL’oggetto String: i metodiMetodo Descrizione e esempi
charAt( indice ) Restituisce una stringa contenente il carattere alla posizione specificata da indice var s = “Tecnologie di Internet”; s.charAt ( 0 ) = “T” s.charAt ( 7 ) = “g” s.charAt ( 100 ) = “”
charCodeAt( indice ) Restituisce il carattere Unicode alla posizione specificata da indice s.charCodeAt ( 0 ) = 84 s.charCodeAt ( 7 ) = 103 s.charCodeAt ( 100 ) = NaN
concat( string ) Concatena stringhe s.concat ( “ – CLEI” ); = “Tecnologie di Inernet – CLEI” s1.concat ( s2 ) = s1 + s2
indexOf( substring, indice )
Cerca la prima occorrenza di substring a partire dalla posizione specificata da indice in avanti s.indexOf( "di", 4 ) = 11 s.indexOf( "di", 14 ) = -1
lastIndexOf( substring, indice )
Cerca l’ultima occorrenza di substring a partire dalla posizione specificata da indice all’indietro s.lastIndexOf( "di", 4 ) = -1 s.lastIndexOf( "di", 14 ) = 11
slice( start, end ) Restitusce la stringa compresa tra start e end. Se end non è specificato, il metodo restituisce la stringa da
start alla fine della stringa. Un end negativo specifica un indice a partire dalla fine della stringa (–1 è l’indice dell’ultimo carattere della stringa) s.slice( 1, 14 ) = “ecnologie di ” s.slice( 12 ) = “i Internet” s.slice( 12, -5 ) = “i Int”
split( string ) Separa la stringa proprietaria del metodo in più stringhe
nella posizioni specificate da substring s.split( "e" ) = “T” “cnologi” “ di Int” “rn” “t” s.split( "u" ) = “Tecnologie di Internet”
![Page 19: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/19.jpg)
11 Ottobre 2005 Stefano Clemente 19
L’oggetto String: i metodiL’oggetto String: i metodi
![Page 20: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/20.jpg)
11 Ottobre 2005 Stefano Clemente 20
L’oggetto Date: i metodiL’oggetto Date: i metodi
![Page 21: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/21.jpg)
11 Ottobre 2005 Stefano Clemente 21
L’oggetto Date: i metodiL’oggetto Date: i metodi
![Page 22: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/22.jpg)
11 Ottobre 2005 Stefano Clemente 22
L’oggetto Boolean: i metodiL’oggetto Boolean: i metodi
var b = new Boolean ( <valore_booleano> ); Metodo Descrizione
toString() Restituisce “true” (stringa) se il valore dell’oggetto Boolean corrisponde a vero altrimenti restituisce “false” (stringa)
valueOf() Restituisce il valore true se l’oggetto Boolean corrisponde a true altrimenti restituisce false
![Page 23: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/23.jpg)
11 Ottobre 2005 Stefano Clemente 23
L’oggetto Number: i metodiL’oggetto Number: i metodi
![Page 24: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/24.jpg)
11 Ottobre 2005 Stefano Clemente 24
L’oggetto Number: le L’oggetto Number: le proprietàproprietà
![Page 25: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/25.jpg)
11 Ottobre 2005 Stefano Clemente 25
ArrayArray• Un array è un
gruppo di locazioni di memoria tutte corrispondenti allo stesso nome e con valori solitamente dello stesso tipo (quest’ultima proprietà non è obbligatoria)
c[ 6 ]
-45
6
0
72
1543
-89
0
62
-3
1
6453
78
c[ 0 ]
c[ 1 ]
c[ 2 ]
c[ 3 ]
c[ 11 ]
c[ 10 ]
c[ 9 ]
c[ 8 ]
c[ 7 ]
c[ 5 ]
c[ 4 ]
indice dell’elementodell’array c
nomedell’array c
Il primo elementoha indice 0
![Page 26: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/26.jpg)
11 Ottobre 2005 Stefano Clemente 26
ArrayArray• Un elemento dell’array può essere acceduto
fornendo il nome dell’array e l’indice dell’elementoes: c [ 2 ]
• L’indice può essere il risultato della valutazione di un’espressionees: c [ a + b ]
• Un elemento di un array può essere trattato come una variabilees: c [ 1 ] += 12;
• Un array in JavaScript è un oggettooggetto
![Page 27: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/27.jpg)
11 Ottobre 2005 Stefano Clemente 27
ArrayArray• La dichiarazione di un array
var c = new Array ( 12 );var c = new Array ( 12 );in cui l’operatore new crea un array di 12 elementi
• La dichiarazione sopra può essere scritta anche nel modo che seguevar c;var c; // dichiara l’array// dichiara l’arrayc = new Array ( 12 );c = new Array ( 12 ); // alloca l’array// alloca l’array
• È possibile dichiarare più array nello stesso statementvar c = new Array ( 12 ), b = new Array ( 104 );var c = new Array ( 12 ), b = new Array ( 104 );
• È possibile dichiarare array vuotivar c = new Array ( );var c = new Array ( );e in questo caso gli elementi saranno aggiunti ogni volta con un assegnamento all’elementoc [ 0 ] = 12;c [ 0 ] = 12;
![Page 28: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/28.jpg)
11 Ottobre 2005 Stefano Clemente 28
ArrayArray• Al momento della dichiarazione si può anche inizializzare l’array
var c = new Array ( 10, 20, 30, 40, 50 );var c = new Array ( 10, 20, 30, 40, 50 );crea un array di 5 elementi con i valori 10 per il primo (0), 20 per il secondo (1), …, 50 per il quinto (4)
• Un altro modo di dichiarare un array e di inizializzarlo è il seguente: var c = [ 10, 20, 30, 40, 50 ] var c = [ 10, 20, 30, 40, 50 ]
• Non è necessario inizializzare tutti gli elementivar c = [ 10, 20, , 40, 50 ]var c = [ 10, 20, , 40, 50 ]
• Una proprietà dell’oggetto array è lengthlength, che conta il numero degli elementi dell’arrayc.lengthc.length
• Un metodo dell’oggetto array è sort(<funzione_confronto>)sort(<funzione_confronto>), che ordina gli elementi dell’array; la funzione argomento è opzionale e nel caso in cui non venga fornita sortsort opera attraverso il confronto delle stringhec.sort ()c.sort ()
![Page 29: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/29.jpg)
11 Ottobre 2005 Stefano Clemente 29
Esempio 6Esempio 6
![Page 30: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/30.jpg)
11 Ottobre 2005 Stefano Clemente 30
Array multi-dimensionaliArray multi-dimensionali
• Sono anche detti “array di array”• Un elemento può contenere a sua volta
un array
a[ 1 ][ 0 ] a[ 1 ][ 1 ] a[ 1 ][ 2 ] a[ 1 ][ 3 ]
Row 0
Row 1
Row 2
Column 0 Column 1 Column 2 Column 3
Row subscript (or index)
Array name
Column subscript (or index)
a[ 0 ][ 0 ] a[ 0 ][ 1 ] a[ 0 ][ 2 ] a[ 0 ][ 3 ]
a[ 2 ][ 0 ] a[ 2 ][ 1 ] a[ 2 ][ 2 ] a[ 2 ][ 3 ]
![Page 31: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/31.jpg)
11 Ottobre 2005 Stefano Clemente 31
Array multi-dimensionaliArray multi-dimensionali
• Esempi di dichiarazionivar b = [ [ 1, 2 ], [ 3, 4 ] ];var b = [ [ 1, 2 ], [ 3, 4 ] ];
var b = [ [ 1, 2 ], [ 3, 4, 5 ] ];var b = [ [ 1, 2 ], [ 3, 4, 5 ] ];
var b;var b;b = new Array ( 2 );b = new Array ( 2 );b [ 1 ] = new Array ( 5 );b [ 1 ] = new Array ( 5 );b [ 2 ] = new Array ( 10 );b [ 2 ] = new Array ( 10 );
![Page 32: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/32.jpg)
11 Ottobre 2005 Stefano Clemente 32
FunzioniFunzioni• Un programmatore può scrivere delle funzioni per codificare
delle azioni che possono essere eseguite in più punti dello script• Una funzione è invocata da una chiamata, uno statement del tipo
<nome_funzione> ( <lista_argomenti> );<nome_funzione> ( <lista_argomenti> );• La funzione esegue le azioni codificate e alla fine restituisce il
risultato delle sue elaborazioni• La sintassi della definizione delle funzioni è
function <nome_funzione> ( <lista_parametri> )function <nome_funzione> ( <lista_parametri> ){{
dichiarazioni e statementdichiarazioni e statement}}in cui <nome_funzione><nome_funzione> è un identificatore valido, <lista_parametri><lista_parametri> è un elenco di nomi di parametri ricevuti con la chiamata; il corpo della funzionecorpo della funzione è la sequenza di dichiarazioni e statement tra parentesi graffe
![Page 33: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/33.jpg)
11 Ottobre 2005 Stefano Clemente 33
FunzioniFunzioni• Il corpo della funzione è anche un blocco: un
blocco è in generale in JavaScript una sequenza di dichiarazioni e statement
• Le funzioni terminano−quando l’esecuzione raggiunge la parentesi graffa
finale• in questo caso la funzione non restituisce alcun risultato
−quando l’esecuzione incontra all’interno del corpo uno statement return;return;
• anche in questo caso la funzione non restituisce alcun risultato
−quando l’esecuzione incontra all’interno del corpo uno statement return ( <espressione> );return ( <espressione> );
• la funzione restituisce il valore di <espressione><espressione>
![Page 34: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/34.jpg)
11 Ottobre 2005 Stefano Clemente 34
Esempio 7Esempio 7
![Page 35: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/35.jpg)
11 Ottobre 2005 Stefano Clemente 35
Passaggio argomentiPassaggio argomenti
• Gli argomenti possono essere passati alle funzioni in due modi−call-by-value
• si passa alla funzione una copia del valore dell’argomento
−call-by-reference• la funzione accede direttamente ai dati (variabili)
di chi la invoca
• In JavaScript tutti gli oggetti sono passati alle funzioni nella modalità call-by-reference
![Page 36: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/36.jpg)
11 Ottobre 2005 Stefano Clemente 36
Esempio 8Esempio 8
![Page 37: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/37.jpg)
11 Ottobre 2005 Stefano Clemente 37
Durata e portata degli Durata e portata degli identificatoriidentificatori• Durata = ciclo di vita dell’identificatore
−periodo per il quale l’identificatore è mantenuto in memoria
−variabili dichiarate nelle funzioni e i parametri delle funzioni hanno durata automaticadurata automatica e sono chiamati identificatori localiidentificatori locali
• creati quando il controllo passa alla funzione in cui sono dichiarati
• distrutti quando la funzione termina la sua esecuzione
−gli identificatori definiti nella parte <head> dell’XHTML hanno durata staticadurata statica e sono chiamati identificatori globaliidentificatori globali
![Page 38: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/38.jpg)
11 Ottobre 2005 Stefano Clemente 38
Durata e portata degli Durata e portata degli identificatoriidentificatori• Portata = è la porzione del programma
in cui l’identificatore può essere riferito−portata globale−portata locale – sono le variabili locali alle
funzioni la cui portata è limitata ai delimitatori “{” e “}” del corpo della funzione• gli identificatori locali alle funzioni hanno portata
limitata alla funzione alla quale appartengono e se hanno lo stesso nome di una variabile globale, nascondono per la loro durata la visibilità della variabile globale
![Page 39: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/39.jpg)
11 Ottobre 2005 Stefano Clemente 39
Esempio 9Esempio 9
![Page 40: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/40.jpg)
11 Ottobre 2005 Stefano Clemente 40
Funzioni Globali di JavaScriptFunzioni Globali di JavaScript
![Page 41: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/41.jpg)
11 Ottobre 2005 Stefano Clemente 41
Strutture di controlloStrutture di controllo• Normalmente l’esecuzione di un programma procede
uno statement dopo l’altro seguendo l’ordine in cui questi sono scritti
• A volte è necessario alterare questa sequenza imponendo che il comando successivo da eseguire non sia quello staticamente successivo (trasferimento del controllo)
• Le strutture di controllo sono− strutture sequenze
• prevedono l’esecuzione dei comandi secondo la sequenza in cui sono stati scritti
− strutture di selezione• prevedono la possibilità si scegliere se eseguire o meno alcune
righe di programma− strutture di ripetizione
• prevedono la possibilità di ripetere più volte uno o più righe di programma
![Page 42: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/42.jpg)
11 Ottobre 2005 Stefano Clemente 42
Le strutture di selezione: ifLe strutture di selezione: if
• È la struttura più semplice e permette di scegliere se eseguire o meno uno o più comandi in base al verificarsi di una condizione
• Esempioif ( a >= 0 )if ( a >= 0 )
document.writeln ( “a è positiva” );document.writeln ( “a è positiva” );
condizione comandotrue
false
![Page 43: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/43.jpg)
11 Ottobre 2005 Stefano Clemente 43
Le strutture di selezione: if/elseLe strutture di selezione: if/else
• A differenza della if permette di codificare un’azione da eseguire se la condizione non si verifica
• Esempioif ( a >= 0 )if ( a >= 0 )
document.writeln ( “a è positiva” );document.writeln ( “a è positiva” );elseelse
document.writeln ( “a è negativa” );document.writeln ( “a è negativa” );
condizione comando1truefalsecomando2
![Page 44: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/44.jpg)
11 Ottobre 2005 Stefano Clemente 44
Le strutture di selezione: if/elseLe strutture di selezione: if/else
• JavaScript dispone di un operatore ternario “?:?:” equivalente al costrutto if/else
• L’esempio precedente potrebbe essere riscritto nel modo seguentedocument.writeln ( document.writeln (
a >= 0 ? “a è positiva” : “a è a >= 0 ? “a è positiva” : “a è negativa” );negativa” );
![Page 45: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/45.jpg)
11 Ottobre 2005 Stefano Clemente 45
Le strutture di selezione: if/elseLe strutture di selezione: if/else
• Si possono annidare diversi if/else per testare condizioni multiple
• Esempioif ( a >= 1 && a <= 10 ) if ( a >= 1 && a <= 10 )
document.writeln ( “1 document.writeln ( “1 ≤ a ≤ 10” );≤ a ≤ 10” );else if else if ( a >= 11 && a <= 20 ) ( a >= 11 && a <= 20 )
document.writeln ( “11 document.writeln ( “11 ≤ a ≤ 20” );≤ a ≤ 20” );else if else if ( a >= 21 && a <= 30 ) ( a >= 21 && a <= 30 )
document.writeln ( “21 document.writeln ( “21 ≤ a ≤ 30” );≤ a ≤ 30” );else if else if ( a >= 31 && a <= 40 ) ( a >= 31 && a <= 40 )
document.writeln ( “31 document.writeln ( “31 ≤ a ≤ 40” );≤ a ≤ 40” );
![Page 46: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/46.jpg)
11 Ottobre 2005 Stefano Clemente 46
Le strutture di selezione: if/elseLe strutture di selezione: if/else
• L’else è associato sempre all’ultimo if, per esempioif ( a >= 1 )if ( a >= 1 )
if ( b >= 1 ) if ( b >= 1 ) document.writeln ( “a e b sono document.writeln ( “a e b sono ≥ 1≥ 1” );” );
else else document.writeln ( “document.writeln ( “a < 1” );a < 1” );
produrrà il risultato “a < 1” quando a >= 1 e b < 1
• Per evitare questo tipo di errori bisogna ricorrere all’uso delle parentesi graffeif ( a >= 1 ) {if ( a >= 1 ) {
if ( b >= 1 ) if ( b >= 1 ) document.writeln ( “a e b sono document.writeln ( “a e b sono ≥ 1≥ 1” );” );
}}else else
document.writeln ( “document.writeln ( “a < 1” );a < 1” );
![Page 47: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/47.jpg)
11 Ottobre 2005 Stefano Clemente 47
Le strutture di selezione: if/elseLe strutture di selezione: if/else
• L’uso delle parentesi graffe è utile anche quando si vuole associare l’esecuzione di più comandi a un ramo if o elseif ( a >= 1 && a <= 10 ) {if ( a >= 1 && a <= 10 ) {
document.writeln ( “document.writeln ( “a a ≥≥ 1” ); 1” );document.writeln ( “adocument.writeln ( “a ≤ 10” ); ≤ 10” );
}}else {else {
document.writeln ( “document.writeln ( “a < 1 oppure ” );a < 1 oppure ” );document.writeln ( “document.writeln ( “a a >> 10” ); 10” );
}}• Un insieme di statement racchiuso tra
parentesi graffe è detto bloccoblocco
![Page 48: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/48.jpg)
11 Ottobre 2005 Stefano Clemente 48
Le strutture di selezione: switchLe strutture di selezione: switch
• Permette la selezione multipla• Sintassiswitch ( <variabile> ) {switch ( <variabile> ) {
case <valore_1>:case <valore_1>:<lista_statement_1><lista_statement_1>break;break;
……case <valore_n>:case <valore_n>:
<lista_statement_n><lista_statement_n>break;break;
default:default:<lista_statement_default><lista_statement_default>
}}
![Page 49: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/49.jpg)
11 Ottobre 2005 Stefano Clemente 49
Esempio 11Esempio 11
![Page 50: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/50.jpg)
11 Ottobre 2005 Stefano Clemente 50
Le strutture di ripetizione: whileLe strutture di ripetizione: while
• Permette di ripetere un comando o una sequenza di comandi fino a quando un data condizione è vera
• La condizione è valutata all’ingresso nella strutturae il comando eseguito solose la condizione è true
• Sintassiwhile ( <condizione> )while ( <condizione> )
<lista_statement>;<lista_statement>;• Esempiovar prodotto = 2;var prodotto = 2;while ( prodotto <= 1000 )while ( prodotto <= 1000 )
prodotto *= 2;prodotto *= 2;
condizione comandotrue
false
![Page 51: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/51.jpg)
11 Ottobre 2005 Stefano Clemente 51
Esempio 12Esempio 12
![Page 52: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/52.jpg)
11 Ottobre 2005 Stefano Clemente 52
Le strutture di ripetizione:Le strutture di ripetizione:do/whiledo/while• Come il comando while, ma la condizione è valutata dopo l’esecuzione
del corpo− il corpo è eseguito almeno una volta
• All’ingresso nella struttura si esegue il corpo dopo si valuta la condizione: se la condizione è true si esegue nuovamente il corpo, se è false si esce dal ciclo
• Sintassido {do {
<lista_statement><lista_statement>} while ( <condizione> );} while ( <condizione> );
• Esempiovar prodotto = 2;var prodotto = 2;do {do {
prodotto *= 2;prodotto *= 2;} while ( prodotto <= 1000 );} while ( prodotto <= 1000 );NB – le parentesi graffe in caso di un unico statement sono opzionali e vengono solitamente messe al solo fine di migliorare la leggibilità del programma
condizione
comando
true
false
![Page 53: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/53.jpg)
11 Ottobre 2005 Stefano Clemente 53
Le strutture di ripetizione: forLe strutture di ripetizione: for
• È una ripetizione controllata da un contatore• Sintassi
for ( <inizializzazione>; <test>; <incremento> )for ( <inizializzazione>; <test>; <incremento> )<lista_statement><lista_statement>
• È equivalente a <inizializzazione><inizializzazione>while ( <test> ){while ( <test> ){<lista_statement><lista_statement><incremento><incremento>}}
• Esempiofor ( var i = 1; i <= 10; i++ )for ( var i = 1; i <= 10; i++ )document.writeln ( i );document.writeln ( i );
![Page 54: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/54.jpg)
11 Ottobre 2005 Stefano Clemente 54
Esempio 13Esempio 13
![Page 55: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/55.jpg)
11 Ottobre 2005 Stefano Clemente 55
Le strutture di ripetizione: for/inLe strutture di ripetizione: for/in
• È una ripetizione eseguita su tutti gli elementi di un insieme
• Sintassifor ( <variabile_elemento> in <insieme> for ( <variabile_elemento> in <insieme> ))
<lista_statement><lista_statement>
• Viene solitamente usata con gli array
![Page 56: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/56.jpg)
11 Ottobre 2005 Stefano Clemente 56
Esempio 14Esempio 14
![Page 57: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/57.jpg)
11 Ottobre 2005 Stefano Clemente 57
Le strutture di ripetizione:Le strutture di ripetizione:break e continuebreak e continue• breakbreak e continuecontinue, usati nelle strutture di ripetizione,
servono per alterare l’esecuzione dei cicli• breakbreak
− provoca l’uscita immediata dalla struttura di ripetizione− all’interno della struttura i comandi successivi al breakbreak non
saranno eseguiti− nessun ciclo verrà più eseguito− si esegue il primo comando successivo alla struttura di
ripetizione• continuecontinue
− forza una nuova iterazione− all’interno della struttura i comandi successivi al continuecontinue
non saranno eseguiti− nei whilewhile e do/whiledo/while la continuecontinue forza il test della
condizione− nei forfor e for/infor/in forza l’incremento dell’elemento di
conteggio e solo dopo il test della condizione
![Page 58: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/58.jpg)
11 Ottobre 2005 Stefano Clemente 58
Esempio 15Esempio 15
![Page 59: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/59.jpg)
11 Ottobre 2005 Stefano Clemente 59
Esempio 16Esempio 16
![Page 60: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/60.jpg)
11 Ottobre 2005 Stefano Clemente 60
Le strutture di ripetizione:Le strutture di ripetizione:break e continue con uso di etichettebreak e continue con uso di etichette• breakbreak e continuecontinue, interrompono l’esecuzione
del ciclo al quale appartengono
• Nel caso di strutture di ripetizione annidate, l’uscita da una non provoca l’uscita dalle altre
• Si può controllare il salto attraverso l’uso di etichette
• Un’etichetta non è altro che un identificatore di uno statement o di un blocco di statement<etichetta>: <statement><etichetta>: <statement>
![Page 61: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/61.jpg)
11 Ottobre 2005 Stefano Clemente 61
Esempio 17Esempio 17
![Page 62: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/62.jpg)
11 Ottobre 2005 Stefano Clemente 62
Esempio 18Esempio 18
![Page 63: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/63.jpg)
11 Ottobre 2005 Stefano Clemente 63
Esempio 19Esempio 19
![Page 64: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/64.jpg)
11 Ottobre 2005 Stefano Clemente 64
Esempio 20Esempio 20
![Page 65: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/65.jpg)
11 Ottobre 2005 Stefano Clemente 65
Funzioni ricorsiveFunzioni ricorsive• Una funzione ricorsiva è una funzione che
richiama se stessa−direttamente−indirettamente attraverso un’altra funzione
• L’uso delle funzioni ricorsive è utile in quei casi in cui−si conosce il caso base−gli altri casi sono riconducibili attraverso casi più
semplici al caso base (chiamata ricorsiva)
• Esempio: fattoriale di un numero – n!n!−Caso base: 1! = 11! = 1−Caso generico: n! = n * (n – 1)!n! = n * (n – 1)!
![Page 66: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/66.jpg)
11 Ottobre 2005 Stefano Clemente 66
Esempio 21Esempio 21
![Page 67: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto](https://reader038.vdocuments.mx/reader038/viewer/2022110118/5542eb77497959361e8e1c12/html5/thumbnails/67.jpg)
11 Ottobre 2005 Stefano Clemente 67
Esempio 22Esempio 22