Sei sulla pagina 1di 61

Corso di Informatica Multimediale

Il linguaggio JavaScript: Comandi

Marco Comini

2021-10-14
JavaScript: Comandi: iterativi indeterminati

Comandi iterativi indeterminati


while ( expr ) stmt
do stmt while ( expr )
for ( stmt ; expr ; stmt ) stmt
Dentro il corpo dei cicli possiamo utilizzare due comandi speciali
break esce immediatamente dal ciclo
continue ricomincia direttamente a valutare la guardia

Marco Comini Informatica Multimediale 2021-10-14 1 / 19


JavaScript: Comandi: Esempi/1

Esempio
calcolare il fattoriale 1 · 2 · . . . ... · n

1 // vers 1
2 var n = Number ( prompt ( " dammi N " ," " ));
3 var fact =1 , i = 2;
4

5 while ( i <= n ) {
6 fact *= i ;
7 i += 1;
8 }
9 print ( fact );

Marco Comini Informatica Multimediale 2021-10-14 2 / 19


JavaScript: Comandi: Esempi/1

Esempio
calcolare il fattoriale 1 · 2 · . . . ... · n

1 // vers 2
2 var n = Number ( prompt ( " dammi N " ," " ));
3 var fact = 1;
4 while ( n > 1) {
5 fact *= n ;
6 n -= 1;
7 }
8 print ( fact );

Marco Comini Informatica Multimediale 2021-10-14 2 / 19


JavaScript: Comandi: Esempi/2

Esempio
Calcolare la media di una sequenza di numeri positivi dati in input (con una
dialog-box) terminando al primo valore non positivo

1 var sum = 0 , k = 0 , x ;
2

3 while ( x > 0 ) {
4 x = Number ( prompt ( " Dammi un numero positivo " ," " ));
5 k += 1;
6 sum += x ;
7 }
8

9 print ( sum / k );

È giusto? Ask students!

Marco Comini Informatica Multimediale 2021-10-14 3 / 19


JavaScript: Comandi: Esempi/2

Esempio
Calcolare la media di una sequenza di numeri positivi dati in input (con una
dialog-box) terminando al primo valore non positivo

1 var sum = 0 , k = 0 , x ;
2

3 while ( x > 0 ) {
4 x = Number ( prompt ( " Dammi un numero positivo " ," " ));
5 k += 1;
6 sum += x ;
7 }
8

9 print ( sum / k );

È giusto? NO! sommiamo anche il valore negativo.

Marco Comini Informatica Multimediale 2021-10-14 3 / 19


JavaScript: Comandi: Esempi/2

Esempio
Calcolare la media di una sequenza di numeri positivi dati in input (con una
dialog-box) terminando al primo valore non positivo

1 var sum = 0 , k = 0 , x ;
2

3 do {
4 x = Number ( prompt ( " Dammi un numero positivo " ," " ));
5 if ( x >0 ) {
6 k += 1;
7 sum += x ;
8 }
9 } while ( x >0 );
10

11 print ( sum / k );

Si può evitare il controllo duplicato?


Marco Comini Informatica Multimediale 2021-10-14 3 / 19
JavaScript: Comandi: Esempi/2

Esempio
Calcolare la media di una sequenza di numeri positivi dati in input (con una
dialog-box) terminando al primo valore non positivo

1 var sum = 0 , k = 0 , x ;
2

3 while ( true ) {
4 x = Number ( prompt ( " Dammi un numero positivo " ," " ));
5 if ( x <=0 ) break ;
6 k += 1;
7 sum += x ;
8 }
9

10 print ( sum / k );

Marco Comini Informatica Multimediale 2021-10-14 3 / 19


JavaScript: Comandi: Esempi/3

Esempio
Determinare se due numeri hanno segno discorde

1 var DiscordantSign ;
2

3 if (x <0 && y >0) DiscordantSign = true ;


4 else if (x >0 && y <0) DiscordantSign = true ;
5 else DiscordantSign = false ;

Si può usare i connettivi logici invece dei comandi codizionali?

Marco Comini Informatica Multimediale 2021-10-14 4 / 19


JavaScript: Comandi: Esempi/3

Esempio
Determinare se due numeri hanno segno discorde

1 var DiscordantSign = (x <0 && y >0) || (x >0 && y <0);

Si può fare in modo più “intelligente”?

Marco Comini Informatica Multimediale 2021-10-14 4 / 19


JavaScript: Comandi: Esempi/3

Esempio
Determinare se due numeri hanno segno discorde

1 var DiscordantSign = x * y < 0 ;

Marco Comini Informatica Multimediale 2021-10-14 4 / 19


Corso di Informatica Multimediale
Linguaggi di programmazione: Astrarre il controllo

Marco Comini

2021-10-14
Astrarre il controllo/1

Definizione (Funzioni/procedure)
Una porzione di codice identificata da un nome con un ambiente locale proprio
che scambia dati con il resto del codice.
Il blocco che contiene il codice viene anche chiamato corpo.

Tre metodi di scambio dati:


parametri
oltre al nome della funzione/procedura si possono specificare dei nomi di
variabile che vengono chiamati parametri formali
sono delle variabili locali allo stesso modo di eventuali variabili locali dichiarate
nel corpo
il loro valore viene definito in fase di chiamata dal chiamante mediante
espressioni che vengono chiamate parametri attuali
valore di ritorno (nel caso delle funzioni)
variabili non-locali

Marco Comini Informatica Multimediale 2021-10-14 5 / 19


Astrarre il controllo/2
Esempio
1 int f ( value int x , value char y ) {
2 int z = 0;
3 ...
4 return x + z ;
5 }
6 ...
7 w += f ( w + g (2) , readChar ());
8 ...
Questa è una funzione int×char→int
Il suo nome è f .
I paramentri formali sono x e y .
Le variabili locali (del corpo) della funzione sono x , y e z .
Nell’assegnamento abbiamo una chiamata di f con parametri attuali
w+g(2) e readChar() .

Marco Comini Informatica Multimediale 2021-10-14 6 / 19


Modalità di passaggio dei parametri

Ci sono varie modalità di passaggio dei parametri. Le analizzeremo ora seguendo il


seguente schema
tipo di comunicazione/scambio dei dati
input i dati passano dal chiamante al chiamato (e non viceversa)
output i dati passano dal chiamato al chiamante (e non viceversa)
input/output i dati passano dal chiamante al chiamato e viceversa
vincoli sui parametri attuali (quali espressioni si possono usare)
semantica della modalità
costo computazionale
in fase di chiamata e di ritorno
dell’accesso al parametro formale

Marco Comini Informatica Multimediale 2021-10-14 7 / 19


Passaggio dei parametri per valore

I parametri sono in input.


I parametri sono r-expr qualsiasi.
Semantica: l’ambiente locale viene esteso con un’associazione fra il
parametro formale e una (nuova) cella di memoria in cui viene depositato, in
fase di chiamata, l’r-value del parametro attuale (che viene valutato
nell’ambiente del chiamante).
Costo chiamata: in fase di chiamata si deve copiare completamente il dato da
passare per cui il costo dipende linearmente dalla dimensione del dato.
Costo uso: lo stesso di un accesso ad una qualsiasi variabile locale.
Costo ritorno: nullo (non si deve fare nulla).

Marco Comini Informatica Multimediale 2021-10-14 8 / 19


Passaggio dei parametri per riferimento

I parametri sono in input/output.


I parametri sono l-expr
Semantica: in fase di chiamata si calcola l’l-value del parametro attuale (che
viene valutato nell’ambiente del chiamante) e l’ambiente locale viene esteso
con un’associazione fra il parametro formale e la cella di memoria identificata
da detto l-value.
Durante l’esecuzione del corpo della funzione ogni modifica del parametro
formale modifica in effetti il parametro attuale.
Costo chiamata: si passa l’l-value quindi il costo del passaggio di un valore
primitivo.
Costo uso: si esegue addizionalmente un accesso indiretto in memoria per
ogni accesso.
Costo ritorno: nullo (non si deve fare nulla).

Marco Comini Informatica Multimediale 2021-10-14 9 / 19


Passaggio dei parametri per risultato

I parametri sono in output.


I parametri sono l-expr.
Semantica: l’ambiente locale viene esteso con un’associazione fra il
parametro formale e una (nuova) cella di memoria. In fase di ritorno copio il
valore finale di questa cella nella locazione identificata dal parametro attuale,
che viene valutata nell’ambiente del chiamante in fase di chiamata.
Costo chiamata: si passa l’l-value quindi il costo del passaggio di un valore
primitivo.
Costo uso: lo stesso di un accesso ad una qualsiasi variabile locale.
Costo ritorno: in fase di ritorno si deve copiare completamente il dato da
restituire per cui il costo dipende linearmente dalla dimensione del dato.

Marco Comini Informatica Multimediale 2021-10-14 10 / 19


Passaggio dei parametri per valore-risultato

I parametri sono in input/output.


I parametri sono l-expr.
Semantica: l’ambiente locale viene esteso con un’associazione fra il
parametro formale e una (nuova) cella di memoria in cui viene depositato, in
fase di chiamata, l’r-value del parametro attuale (che viene valutato
nell’ambiente del chiamante). In fase di ritorno copio il valore finale di questa
cella nella locazione identificata dal parametro attuale, che viene valutata
nell’ambiente del chiamante in fase di chiamata.
Costo chiamata: si deve copiare completamente il dato da passare per cui il
costo dipende linearmente dalla dimensione del dato.
Costo uso: lo stesso di un accesso ad una qualsiasi variabile locale.
Costo ritorno: si deve copiare completamente il dato da restituire per cui il
costo dipende linearmente dalla dimensione del dato.

Marco Comini Informatica Multimediale 2021-10-14 11 / 19


Esempio: confronto reference e value-result

1 int f ( reference int x , 1 int f ( valueresult int x ,


2 reference int y , 2 valueresult int y ,
3 reference int z ){ 3 reference int z ){
4 x = 4; 4 x = 4;
5 y = 2; 5 y = 2;
6 if x == y then 6 if x == y then
7 z =1; 7 z =1;
8 } 8 }
9 int a =3 , b =0; 9 int a =3 , b =0;
10 f (a ,a , b ); 10 f (a ,a , b );
a a
b b

Marco Comini Informatica Multimediale 2021-10-14 12 / 19


Esempio: confronto reference e value-result

1 int f ( reference int x , 1 int f ( valueresult int x ,


2 reference int y , 2 valueresult int y ,
3 reference int z ){ 3 reference int z ){
4 x = 4; 4 x = 4;
5 y = 2; 5 y = 2;
6 if x == y then 6 if x == y then
7 z =1; 7 z =1;
8 } 8 }
9 →int a =3 , b =0; 9 →int a =3 , b =0;
10 f (a ,a , b ); 10 f (a ,a , b );
a 3 a 3
b 0 b 0

Marco Comini Informatica Multimediale 2021-10-14 12 / 19


Esempio: confronto reference e value-result

1 int f ( reference int x , 1 int f ( valueresult int x ,


2 reference int y , 2 valueresult int y ,
3 reference int z ){ 3 reference int z ){
4 x = 4; 4 x = 4;
5 y = 2; 5 y = 2;
6 if x == y then 6 if x == y then
7 z =1; 7 z =1;
8 } 8 }
9 int a =3 , b =0; 9 int a =3 , b =0;
10 →f (a ,a , b ); 10 →f (a ,a , b );
a 3 a 3
b 0 b 0

x
y

Marco Comini Informatica Multimediale 2021-10-14 12 / 19


Esempio: confronto reference e value-result

1 →int f ( reference int x , 1 →int f ( valueresult int x ,


2 reference int y , 2 valueresult int y ,
3 reference int z ){ 3 reference int z ){
4 x = 4; 4 x = 4;
5 y = 2; 5 y = 2;
6 if x == y then 6 if x == y then
7 z =1; 7 z =1;
8 } 8 }
9 int a =3 , b =0; 9 int a =3 , b =0;
10 f (a ,a , b ); 10 f (a ,a , b );
a x 3 a 3
b 0 b 0

x 3
y

Marco Comini Informatica Multimediale 2021-10-14 12 / 19


Esempio: confronto reference e value-result

1 int f ( reference int x , 1 int f ( valueresult int x ,


2 → reference int y , 2 → valueresult int y ,
3 reference int z ){ 3 reference int z ){
4 x = 4; 4 x = 4;
5 y = 2; 5 y = 2;
6 if x == y then 6 if x == y then
7 z =1; 7 z =1;
8 } 8 }
9 int a =3 , b =0; 9 int a =3 , b =0;
10 f (a ,a , b ); 10 f (a ,a , b );
a x y 3 a 3
b 0 b 0

x 3
y 3

Marco Comini Informatica Multimediale 2021-10-14 12 / 19


Esempio: confronto reference e value-result

1 int f ( reference int x , 1 int f ( valueresult int x ,


2 reference int y , 2 valueresult int y ,
3 → reference int z ){ 3 → reference int z ){
4 x = 4; 4 x = 4;
5 y = 2; 5 y = 2;
6 if x == y then 6 if x == y then
7 z =1; 7 z =1;
8 } 8 }
9 int a =3 , b =0; 9 int a =3 , b =0;
10 f (a ,a , b ); 10 f (a ,a , b );
a x y 3 a 3
b z 0 b z 0

x 3
y 3

Marco Comini Informatica Multimediale 2021-10-14 12 / 19


Esempio: confronto reference e value-result

1 int f ( reference int x , 1 int f ( valueresult int x ,


2 reference int y , 2 valueresult int y ,
3 reference int z ){ 3 reference int z ){
4 → x = 4; 4 → x = 4;
5 y = 2; 5 y = 2;
6 if x == y then 6 if x == y then
7 z =1; 7 z =1;
8 } 8 }
9 int a =3 , b =0; 9 int a =3 , b =0;
10 f (a ,a , b ); 10 f (a ,a , b );
a x y 34 a 3
b z 0 b z 0

x 34
y 3

Marco Comini Informatica Multimediale 2021-10-14 12 / 19


Esempio: confronto reference e value-result

1 int f ( reference int x , 1 int f ( valueresult int x ,


2 reference int y , 2 valueresult int y ,
3 reference int z ){ 3 reference int z ){
4 x = 4; 4 x = 4;
5 → y = 2; 5 → y = 2;
6 if x == y then 6 if x == y then
7 z =1; 7 z =1;
8 } 8 }
9 int a =3 , b =0; 9 int a =3 , b =0;
10 f (a ,a , b ); 10 f (a ,a , b );
a x y 42 a 3
b z 0 b z 0

x 4
y 32

Marco Comini Informatica Multimediale 2021-10-14 12 / 19


Esempio: confronto reference e value-result

1 int f ( reference int x , 1 int f ( valueresult int x ,


2 reference int y , 2 valueresult int y ,
3 reference int z ){ 3 reference int z ){
4 x = 4; 4 x = 4;
5 y = 2; 5 y = 2;
6 → if x == y then 6 → if x == y then
7 z =1; 7 z =1;
8 } 8 }
9 int a =3 , b =0; 9 int a =3 , b =0;
10 f (a ,a , b ); 10 f (a ,a , b );
a x y 2 a 3
b z 0 b z 0

eval x==y =⇒ 2==2 =⇒ true x 4


y 2

eval x==y =⇒ 4==2 =⇒ false


Marco Comini Informatica Multimediale 2021-10-14 12 / 19
Esempio: confronto reference e value-result

1 int f ( reference int x , 1 →int f ( valueresult int x ,


2 reference int y , 2 valueresult int y ,
3 reference int z ){ 3 reference int z ){
4 x = 4; 4 x = 4;
5 y = 2; 5 y = 2;
6 if x == y then 6 if x == y then
7 → z =1; 7 z =1;
8 } 8 }
9 int a =3 , b =0; 9 int a =3 , b =0;
10 f (a ,a , b ); 10 f (a ,a , b );
a x y 2 a 34
b z 01 b z 0

x 4
y 2

Marco Comini Informatica Multimediale 2021-10-14 12 / 19


Esempio: confronto reference e value-result

1 int f ( reference int x , 1 int f ( valueresult int x ,


2 reference int y , 2 → valueresult int y ,
3 reference int z ){ 3 reference int z ){
4 x = 4; 4 x = 4;
5 y = 2; 5 y = 2;
6 if x == y then 6 if x == y then
7 z =1; 7 z =1;
8 } 8 }
9 int a =3 , b =0; 9 int a =3 , b =0;
10 f (a ,a , b ); 10 f (a ,a , b );
a 2 a 42
b 1 b 0
finished x 4
y 2

Marco Comini Informatica Multimediale 2021-10-14 12 / 19


Esempio: confronto reference e value-result

1 int f ( reference int x , 1 int f ( valueresult int x ,


2 reference int y , 2 valueresult int y ,
3 reference int z ){ 3 reference int z ){
4 x = 4; 4 x = 4;
5 y = 2; 5 y = 2;
6 if x == y then 6 if x == y then
7 z =1; 7 z =1;
8 } 8 }
9 int a =3 , b =0; 9 int a =3 , b =0;
10 f (a ,a , b ); 10 f (a ,a , b );
a 2 a 2
b 1 b 0

finished finished

Marco Comini Informatica Multimediale 2021-10-14 12 / 19


Corso di Informatica Multimediale
Astrarre il controllo in JavaScript

Marco Comini

2021-10-14
JavaScript: Astrarre il controllo

All’interno di un qualsiasi blocco si dichiara una funzione nel modo seguente


1 function id ( id 1 , ..., id n ) {
2 ...
3 }

Visto che nel linguaggio non di dichiarano i tipi abbiamo solo l’elenco dei
nomi dei parametri formali.
All’interno del corpo si può usare il comando
1 return r-expr
che termina l’esecuzione e restituisce come valore di ritorno l’r-value della
r-expr.
Se non si esegue un return allora al termine del corpo si restituisce come
valore di ritorno il valore (primitivo) undefined .

Marco Comini Informatica Multimediale 2021-10-14 13 / 19


JavaScript: Meccanismo di chiamata

Per i dati di tipo primitivo (gli unici visti fin’ora) si usa il passaggio per
valore.
Si ammettono chiamate con un numero di parametri attuali diverso dal
numero di parametri formali.
Consideriamo
▶ una funzione f (x1 , . . . , xn )
▶ una chiamata f (e1 , . . . , ek ) dove k può essere diverso da n
▶ le r-expr ei siano di tipo primitivo
Si valuta l’r-value di ogni e1 , . . . , ek , in ordine. Assumiamo di chiamare vi
l’r-value di ei .
Per ogni 1 ≤ i ≤ min(n, k), si copia il valore vi in una cella di memoria
riservata per il parametro xi
Per ogni k ≤ i ≤ n, si copia undefined in una cella di memoria riservata per
il parametro xi .
quindi eventuali argomenti in eccesso non vengono utilizzati mentre se non se
ne fornisce abbastanza i parametri formali corrispondenti saranno
undefined

Marco Comini Informatica Multimediale 2021-10-14 14 / 19


Corso di Informatica Multimediale
JavaScript: Esempi

Marco Comini

2021-10-14
JavaScript: Esempi funzioni/1
1 // funzione che calcola il fattoriale , vers 1
2 function fact ( n ) {
3 var fact =1 , i = 2;
4 while ( i <= n ) {
5 fact *= i ;
6 i +=1;
7 }
8 return ( fact );
9 }
1 // funzione che calcola il fattoriale , vers 2
2 function fact ( n ) {
3 var fact =1;
4 while ( n > 0) {
5 fact *= n ;
6 n -= 1;
7 }
8 return ( fact );
9 }
Marco Comini Informatica Multimediale 2021-10-14 15 / 19
JavaScript: Esempi funzioni/2

Esempio
Funzione booleana che determina se due numeri hanno segno discorde

1 // versione 1
2

3 function DiscordantSign (x , y ) {
4 if (x <0 && y >0) return true ;
5 if (x >0 && y <0) return true ;
6 return false ;
7 }

Marco Comini Informatica Multimediale 2021-10-14 16 / 19


JavaScript: Esempi funzioni/2

Esempio
Funzione booleana che determina se due numeri hanno segno discorde

1 // versione 2
2

3 function DiscordantSign (x , y ) {
4 return ( (x <0 && y >0) || (x >0 && y <0) );
5 }

Marco Comini Informatica Multimediale 2021-10-14 16 / 19


JavaScript: Esempi funzioni/2

Esempio
Funzione booleana che determina se due numeri hanno segno discorde

1 // versione 3
2

3 function DiscordantSign (x , y ) {
4 return ( x * y < 0 );
5 }

Marco Comini Informatica Multimediale 2021-10-14 16 / 19


JavaScript: Esempi funzioni/3

Esempio
Pn
Funzione f (n) = i=1 i

versione 1

1 function f ( limit ) {
2 var total = 0 , count = 1;
3

4 while ( count <= limit ) {


5 total += count ;
6 count += 1;
7 }
8 return ( total );
9 }

Marco Comini Informatica Multimediale 2021-10-14 17 / 19


JavaScript: Esempi funzioni/3

Esempio
Pn
Funzione f (n) = i=1 i

versione 2

1 function f ( limit ) {
2 var total = 0 , count = 1;
3

4 do {
5 total += count ;
6 count += 1;
7 } while ( count <= limit );
8 return ( total );
9 }

Marco Comini Informatica Multimediale 2021-10-14 17 / 19


JavaScript: Esempi funzioni/3

Esempio
Pn
Funzione f (n) = i=1 i

versione 3

1 function f ( limit ) {
2 return ( limit *( limit +1)/2);
3 }

Marco Comini Informatica Multimediale 2021-10-14 17 / 19


JavaScript: Esempi funzioni/4

1 test ();
2

3 function prova1 (a ,b , c ) {
4 print ( " par a = " ); show ( a );
5 print ( " par b = " ); show ( b );
6 print ( " par c = " ); show ( c );
7 }
8

9 function test () {
10 print ( " value prova1 = " + prova1 ( " a " ,3));
11 }
12

13 function test2 () {
14 print ( " value prova1 = " );
15 show ( prova1 ( " a " ,3 ,4 ,5));
16 }

Marco Comini Informatica Multimediale 2021-10-14 18 / 19


JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
4 print ( " thirdLevel v = " + v );
5 print ( " thirdLevel x = " + x ); firstLevel
6 print ( " thirdLevel y = " + y ); v
7 v += 2;
8 x += 3;
9 y += 4;
10 }
11 print ( " secondLevel1 v = " + v );
12 print ( " secondLevel1 x = " + x );
13 thirdLevel (20 ,30);
14 v += 102;
15 x += 103;
16 print ( " secondLevel2 v = " + v );
17 print ( " secondLevel2 x = " + x );
18 }
19 print ( " firstLevel1 v = " + v );
20 secondLevel (10);
21 print ( " firstLevel2 v = " + v );
22 }
23
24 firstLevel (0);
Marco Comini Informatica Multimediale 2021-10-14 19 / 19
JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
4 print ( " thirdLevel v = " + v );
5 print ( " thirdLevel x = " + x ); firstLevel
6 print ( " thirdLevel y = " + y ); v 0
7 v += 2;
8 x += 3;
9 y += 4;
10 }
11 print ( " secondLevel1 v = " + v );
12 print ( " secondLevel1 x = " + x );
13 thirdLevel (20 ,30);
14 v += 102;
15 x += 103;
16 print ( " secondLevel2 v = " + v );
17 print ( " secondLevel2 x = " + x );
18 }
19 print ( " firstLevel1 v = " + v );
20 secondLevel (10);
21 print ( " firstLevel2 v = " + v );
22 }
23
24 −→firstLevel (0);
Marco Comini Informatica Multimediale 2021-10-14 19 / 19
JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
firstLevel1 v = 0
4 print ( " thirdLevel v = " + v );
5 print ( " thirdLevel x = " + x );
6 print ( " thirdLevel y = " + y ); firstLevel
7 v += 2;
v 0
8 x += 3;
9 y += 4;
10 }
11 print ( " secondLevel1 v = " + v );
12 print ( " secondLevel1 x = " + x );
13 thirdLevel (20 ,30);
14 v += 102;
15 x += 103;
16 print ( " secondLevel2 v = " + v );
17 print ( " secondLevel2 x = " + x );
18 }
19 −→ print ( " firstLevel1 v = " + v );
20 secondLevel (10);
21 print ( " firstLevel2 v = " + v );
22 }
23
24 firstLevel (0);
Marco Comini Informatica Multimediale 2021-10-14 19 / 19
JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
firstLevel1 v = 0
4 print ( " thirdLevel v = " + v );
5 print ( " thirdLevel x = " + x );
6 print ( " thirdLevel y = " + y ); secondLevel
7 v += 2;
x 10
8 x += 3;
9 y += 4;
10 } firstLevel
11 print ( " secondLevel1 v = " + v );
12 print ( " secondLevel1 x = " + x );
v 0
13 thirdLevel (20 ,30);
14 v += 102;
15 x += 103;
16 print ( " secondLevel2 v = " + v );
17 print ( " secondLevel2 x = " + x );
18 }
19 print ( " firstLevel1 v = " + v );
20 −→ secondLevel (10);
21 print ( " firstLevel2 v = " + v );
22 }
23
24 firstLevel (0);
Marco Comini Informatica Multimediale 2021-10-14 19 / 19
JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
firstLevel1 v = 0
4 print ( " thirdLevel v = " + v ); secondLevel1 v = 0
5 print ( " thirdLevel x = " + x );
6 print ( " thirdLevel y = " + y );
7 v += 2;
8 x += 3;
9 y += 4; secondLevel
10 } x 10
11 −→ print ( " secondLevel1 v = " + v );
12 print ( " secondLevel1 x = " + x );
13 thirdLevel (20 ,30); firstLevel
14 v += 102; v 0
15 x += 103;
16 print ( " secondLevel2 v = " + v );
17 print ( " secondLevel2 x = " + x );
18 }
19 print ( " firstLevel1 v = " + v );
20 secondLevel (10);
21 print ( " firstLevel2 v = " + v );
22 }
23
24 firstLevel (0);
Marco Comini Informatica Multimediale 2021-10-14 19 / 19
JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
firstLevel1 v = 0
4 print ( " thirdLevel v = " + v ); secondLevel1 v = 0
5 print ( " thirdLevel x = " + x ); secondLevel1 x = 10
6 print ( " thirdLevel y = " + y );
7 v += 2;
8 x += 3;
9 y += 4;
10 } secondLevel
11 print ( " secondLevel1 v = " + v ); x 10
12 −→ print ( " secondLevel1 x = " + x );
13 thirdLevel (20 ,30);
14 v += 102; firstLevel
15 x += 103; v 0
16 print ( " secondLevel2 v = " + v );
17 print ( " secondLevel2 x = " + x );
18 }
19 print ( " firstLevel1 v = " + v );
20 secondLevel (10);
21 print ( " firstLevel2 v = " + v );
22 }
23
24 firstLevel (0);
Marco Comini Informatica Multimediale 2021-10-14 19 / 19
JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
firstLevel1 v = 0
4 print ( " thirdLevel v = " + v ); secondLevel1 v = 0
5 print ( " thirdLevel x = " + x ); secondLevel1 x = 10
6 print ( " thirdLevel y = " + y );
7 v += 2;
8 x += 3;
9 y += 4;
10 } thirdLevel
11 print ( " secondLevel1 v = " + v ); v 20
12 print ( " secondLevel1 x = " + x );
13 −→ thirdLevel (20 ,30);
y 30
14 v += 102;
15 x += 103; secondLevel
16 print ( " secondLevel2 v = " + v );
17 print ( " secondLevel2 x = " + x ); x 10
18 }
19 print ( " firstLevel1 v = " + v );
20 secondLevel (10);
firstLevel
21 print ( " firstLevel2 v = " + v ); v 0
22 }
23
24 firstLevel (0);
Marco Comini Informatica Multimediale 2021-10-14 19 / 19
JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
firstLevel1 v = 0
4 −→ print ( " thirdLevel v = " + v ); secondLevel1 v = 0
5 print ( " thirdLevel x = " + x ); secondLevel1 x = 10
6 print ( " thirdLevel y = " + y ); thirdLevel v = 20
7 v += 2;
8 x += 3;
9 y += 4;
10 } thirdLevel
11 print ( " secondLevel1 v = " + v ); v 20
12 print ( " secondLevel1 x = " + x );
13 thirdLevel (20 ,30);
y 30
14 v += 102;
15 x += 103; secondLevel
16 print ( " secondLevel2 v = " + v );
17 print ( " secondLevel2 x = " + x ); x 10
18 }
19 print ( " firstLevel1 v = " + v );
20 secondLevel (10);
firstLevel
21 print ( " firstLevel2 v = " + v ); v 0
22 }
23
24 firstLevel (0);
Marco Comini Informatica Multimediale 2021-10-14 19 / 19
JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
firstLevel1 v = 0
4 print ( " thirdLevel v = " + v ); secondLevel1 v = 0
5 −→ print ( " thirdLevel x = " + x ); secondLevel1 x = 10
6 print ( " thirdLevel y = " + y ); thirdLevel v = 20
7 v += 2;
8 x += 3; thirdLevel x = 10
9 y += 4;
10 }
11 print ( " secondLevel1 v = " + v ); thirdLevel
12 print ( " secondLevel1 x = " + x );
13 thirdLevel (20 ,30);
v 20
14 v += 102; y 30
15 x += 103;
16 print ( " secondLevel2 v = " + v );
17 print ( " secondLevel2 x = " + x ); secondLevel
18 } x 10
19 print ( " firstLevel1 v = " + v );
20 secondLevel (10);
21 print ( " firstLevel2 v = " + v ); firstLevel
22 } v 0
23
24 firstLevel (0);
Marco Comini Informatica Multimediale 2021-10-14 19 / 19
JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
firstLevel1 v = 0
4 print ( " thirdLevel v = " + v ); secondLevel1 v = 0
5 print ( " thirdLevel x = " + x ); secondLevel1 x = 10
6 −→ print ( " thirdLevel y = " + y ); thirdLevel v = 20
7 v += 2;
8 x += 3; thirdLevel x = 10
9 y += 4; thirdLevel y = 30
10 }
11 print ( " secondLevel1 v = " + v );
12 print ( " secondLevel1 x = " + x );
thirdLevel
13 thirdLevel (20 ,30);
14 v += 102; v 20
15 x += 103; y 30
16 print ( " secondLevel2 v = " + v );
17 print ( " secondLevel2 x = " + x );
18 } secondLevel
19 print ( " firstLevel1 v = " + v ); x 10
20 secondLevel (10);
21 print ( " firstLevel2 v = " + v );
22 } firstLevel
23
v 0
24 firstLevel (0);
Marco Comini Informatica Multimediale 2021-10-14 19 / 19
JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
firstLevel1 v = 0
4 print ( " thirdLevel v = " + v ); secondLevel1 v = 0
5 print ( " thirdLevel x = " + x ); secondLevel1 x = 10
6 print ( " thirdLevel y = " + y ); thirdLevel v = 20
7 −→ v += 2;
8 x += 3; thirdLevel x = 10
9 y += 4; thirdLevel y = 30
10 }
11 print ( " secondLevel1 v = " + v );
12 print ( " secondLevel1 x = " + x );
thirdLevel
13 thirdLevel (20 ,30);
14 v += 102; v 20 22
15 x += 103; y 30
16 print ( " secondLevel2 v = " + v );
17 print ( " secondLevel2 x = " + x );
18 } secondLevel
19 print ( " firstLevel1 v = " + v ); x 10
20 secondLevel (10);
21 print ( " firstLevel2 v = " + v );
22 } firstLevel
23
24 firstLevel (0);
v 0
Marco Comini Informatica Multimediale 2021-10-14 19 / 19
JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
firstLevel1 v = 0
4 print ( " thirdLevel v = " + v ); secondLevel1 v = 0
5 print ( " thirdLevel x = " + x ); secondLevel1 x = 10
6 print ( " thirdLevel y = " + y ); thirdLevel v = 20
7 v += 2;
8 −→ x += 3; thirdLevel x = 10
9 y += 4; thirdLevel y = 30
10 }
11 print ( " secondLevel1 v = " + v );
12 print ( " secondLevel1 x = " + x );
thirdLevel
13 thirdLevel (20 ,30);
14 v += 102; v 22
15 x += 103; y 30
16 print ( " secondLevel2 v = " + v );
17 print ( " secondLevel2 x = " + x );
18 } secondLevel
19 print ( " firstLevel1 v = " + v ); x 10 13
20 secondLevel (10);
21 print ( " firstLevel2 v = " + v );
22 } firstLevel
23
24 firstLevel (0);
v 0
Marco Comini Informatica Multimediale 2021-10-14 19 / 19
JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
firstLevel1 v = 0
4 print ( " thirdLevel v = " + v ); secondLevel1 v = 0
5 print ( " thirdLevel x = " + x ); secondLevel1 x = 10
6 print ( " thirdLevel y = " + y ); thirdLevel v = 20
7 v += 2;
8 x += 3; thirdLevel x = 10
9 −→ y += 4; thirdLevel y = 30
10 }
11 print ( " secondLevel1 v = " + v );
12 print ( " secondLevel1 x = " + x );
thirdLevel
13 thirdLevel (20 ,30);
14 v += 102; v 22
15 x += 103; y 30 34
16 print ( " secondLevel2 v = " + v );
17 print ( " secondLevel2 x = " + x );
18 } secondLevel
19 print ( " firstLevel1 v = " + v ); x 13
20 secondLevel (10);
21 print ( " firstLevel2 v = " + v );
22 } firstLevel
23
24 firstLevel (0);
v 0
Marco Comini Informatica Multimediale 2021-10-14 19 / 19
JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
firstLevel1 v = 0
4 print ( " thirdLevel v = " + v ); secondLevel1 v = 0
5 print ( " thirdLevel x = " + x ); secondLevel1 x = 10
6 print ( " thirdLevel y = " + y ); thirdLevel v = 20
7 v += 2;
8 x += 3; thirdLevel x = 10
9 y += 4; thirdLevel y = 30
10 }
11 print ( " secondLevel1 v = " + v );
12 print ( " secondLevel1 x = " + x );
secondLevel
13 thirdLevel (20 ,30);
14 −→ v += 102; x 13
15 x += 103;
16 print ( " secondLevel2 v = " + v );
17 print ( " secondLevel2 x = " + x ); firstLevel
18 } v 0 102
19 print ( " firstLevel1 v = " + v );
20 secondLevel (10);
21 print ( " firstLevel2 v = " + v );
22 }
23
24 firstLevel (0);
Marco Comini Informatica Multimediale 2021-10-14 19 / 19
JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
firstLevel1 v = 0
4 print ( " thirdLevel v = " + v ); secondLevel1 v = 0
5 print ( " thirdLevel x = " + x ); secondLevel1 x = 10
6 print ( " thirdLevel y = " + y ); thirdLevel v = 20
7 v += 2;
8 x += 3; thirdLevel x = 10
9 y += 4; thirdLevel y = 30
10 }
11 print ( " secondLevel1 v = " + v );
12 print ( " secondLevel1 x = " + x );
secondLevel
13 thirdLevel (20 ,30);
14 v += 102; x 13 116
15 −→ x += 103;
16 print ( " secondLevel2 v = " + v );
17 print ( " secondLevel2 x = " + x ); firstLevel
18 } v 102
19 print ( " firstLevel1 v = " + v );
20 secondLevel (10);
21 print ( " firstLevel2 v = " + v );
22 }
23
24 firstLevel (0);
Marco Comini Informatica Multimediale 2021-10-14 19 / 19
JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
firstLevel1 v = 0
4 print ( " thirdLevel v = " + v ); secondLevel1 v = 0
5 print ( " thirdLevel x = " + x ); secondLevel1 x = 10
6 print ( " thirdLevel y = " + y ); thirdLevel v = 20
7 v += 2;
8 x += 3; thirdLevel x = 10
9 y += 4; thirdLevel y = 30
10 } secondLevel2 v = 102
11 print ( " secondLevel1 v = " + v );
12 print ( " secondLevel1 x = " + x );
13 thirdLevel (20 ,30);
14 v += 102; secondLevel
15 x += 103; x 116
16 −→ print ( " secondLevel2 v = " + v );
17 print ( " secondLevel2 x = " + x );
18 } firstLevel
19 print ( " firstLevel1 v = " + v ); v 102
20 secondLevel (10);
21 print ( " firstLevel2 v = " + v );
22 }
23
24 firstLevel (0);
Marco Comini Informatica Multimediale 2021-10-14 19 / 19
JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
firstLevel1 v = 0
4 print ( " thirdLevel v = " + v ); secondLevel1 v = 0
5 print ( " thirdLevel x = " + x ); secondLevel1 x = 10
6 print ( " thirdLevel y = " + y ); thirdLevel v = 20
7 v += 2;
8 x += 3; thirdLevel x = 10
9 y += 4; thirdLevel y = 30
10 } secondLevel2 v = 102
11 print ( " secondLevel1 v = " + v ); secondLevel2 x = 116
12 print ( " secondLevel1 x = " + x );
13 thirdLevel (20 ,30);
14 v += 102;
15 x += 103; secondLevel
16 print ( " secondLevel2 v = " + v ); x 116
17 −→ print ( " secondLevel2 x = " + x );
18 }
19 print ( " firstLevel1 v = " + v ); firstLevel
20 secondLevel (10); v 102
21 print ( " firstLevel2 v = " + v );
22 }
23
24 firstLevel (0);
Marco Comini Informatica Multimediale 2021-10-14 19 / 19
JavaScript: Esempi funzioni/5
1 function firstLevel ( v ) { Output
2 function secondLevel ( x ) {
3 function thirdLevel ( v , y ) {
firstLevel1 v = 0
4 print ( " thirdLevel v = " + v ); secondLevel1 v = 0
5 print ( " thirdLevel x = " + x ); secondLevel1 x = 10
6 print ( " thirdLevel y = " + y ); thirdLevel v = 20
7 v += 2;
8 x += 3; thirdLevel x = 10
9 y += 4; thirdLevel y = 30
10 } secondLevel2 v = 102
11 print ( " secondLevel1 v = " + v ); secondLevel2 x = 116
12 print ( " secondLevel1 x = " + x );
13 thirdLevel (20 ,30); firstLevel2 v = 102
14 v += 102;
15 x += 103;
16 print ( " secondLevel2 v = " + v ); firstLevel
17 print ( " secondLevel2 x = " + x );
18 }
v 102
19 print ( " firstLevel1 v = " + v );
20 secondLevel (10);
21 −→ print ( " firstLevel2 v = " + v );
22 }
23
24 firstLevel (0);
Marco Comini Informatica Multimediale 2021-10-14 19 / 19

Potrebbero piacerti anche