Skip to content

Commit 1eacf66

Browse files
longo-andreapasor1
andauthored
Apply suggestions from code review
Co-authored-by: Simone Pasini <66781510+pasor1@users.noreply.github.com>
1 parent 33eba5d commit 1eacf66

File tree

3 files changed

+13
-13
lines changed

3 files changed

+13
-13
lines changed

1-js/99-js-misc/02-eval/1-eval-calculator/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ alert( eval(expr) );
88

99
L'utente può inserire qualsiasi testo o codice.
1010

11-
Per rendere tutto più sicuro, limitiamo ai soli caratteri aritmetici, possiamo verificare `expr` utilizzando un'[espressione regolare](info:regular-expressions), in questo modo potrà contenere solamente cifre e operatori.
11+
Per rendere il tutto più sicuro e consentire solo caratteri aritmetici, possiamo verificare `expr` utilizzando un'[espressione regolare](info:regular-expressions), in questo modo la stringa potrà contenere solamente cifre e operatori.

1-js/99-js-misc/02-eval/1-eval-calculator/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ importance: 4
44

55
# Eval-calculator
66

7-
Create una calcolatrice che richiede all'utente (tramite prompt) un'espressione aritmetica e ne ritorni il risultato.
7+
Create una calcolatrice che richieda all'utente (tramite prompt) un'espressione aritmetica e ne ritorni il risultato.
88

99
Non c'è alcun bisogno di testare la correttezza dell'espressione. Limitatevi ad eseguirla e ritornarne il risultato.
1010

1-js/99-js-misc/02-eval/article.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ let code = 'alert("Hello")';
1515
eval(code); // Hello
1616
```
1717

18-
Una stringa di codice potrebbe essere molto lunga, potrebbe contenere interruzioni di riga, dichiarazioni di funzione, variabili e cosi via.
18+
Una stringa di codice può essere molto lunga, contenere interruzioni di riga, dichiarazioni di funzione, variabili e cosi via.
1919

2020
Il risultato ritornato da `eval` corrisponde a quello dell'ultima istruzione.
2121

@@ -30,7 +30,7 @@ let value = eval('let i = 0; ++i');
3030
alert(value); // 1
3131
```
3232

33-
Il codice valutato viene eseguito nel lexical environment corrente, quindi può accedere alle variabili esterne:
33+
Il codice valutato viene eseguito nel *lexical environment* corrente, quindi può accedere alle variabili esterne:
3434

3535
```js run no-beautify
3636
let a = 1;
@@ -46,26 +46,26 @@ function f() {
4646
f();
4747
```
4848

49-
Può quindi modificare le variabili esterne:
49+
Allo stesso modo, può modificare le variabili esterne:
5050

5151
```js untrusted refresh run
5252
let x = 5;
5353
eval("x = 10");
5454
alert(x); // 10, valore modificato
5555
```
5656

57-
In strict mode, `eval` viene eseguito in un lexical environment separato. Quindi le funzioni e le variabili dichiarate internamente, non sono visibili all'esterno:
57+
In strict mode, `eval` viene eseguito in un *lexical environment* separato. Quindi le funzioni e le variabili dichiarate internamente, non sono visibili all'esterno:
5858

5959
```js untrusted refresh run
60-
// reminder: 'use strict' è abilitato di default negli esempio che stiamo eseguendo
60+
// attenzione: 'use strict' è abilitato di default negli esempi che stiamo eseguendo
6161

6262
eval("let x = 5; function f() {}");
6363

6464
alert(typeof x); // undefined (variabile inesistente)
6565
// anche la funzione f non è visibile
6666
```
6767

68-
Senza `use strict`, `eval` non viene eseguito in un lexical environment separato, quindi saremo in grado di vedere `x` e `f` dall'esterno.
68+
Senza `use strict`, `eval` non viene eseguito in un *lexical environment* separato, quindi saremo in grado di vedere `x` e `f` dall'esterno.
6969

7070
## Utilizzare "eval"
7171

@@ -75,9 +75,9 @@ La motivazione è piuttosto semplice: molto tempo fa, JavaScript era un linguagg
7575

7676
Al momento, non esiste alcuna ragione per cui utilizzare `eval`. Se qualcuno lo sta utilizzando, c'è una buona possibilità che questo sia rimpiazzabile con un costrutto del linguaggio oppure con un [modulo JavaScript](info:modules).
7777

78-
Fate attenzione che la sua capacità di accedere alle variabile esterne, può generare side-effects.
78+
Fate attenzione: la sua capacità di accedere alle variabile esterne può generare side-effects.
7979

80-
I code minifiers (strumenti utilizzati sugli script JS prima di spostarli in produzione, per comprimerli) rinominano le variabili locali con nomi più brevi (come `a`, `b` etc) in modo da rendere il codice più breve. Questa operazione, solitamente, è sicura. Non lo è, però, se stiamo utilizzando `eval`, poiché al suo interno potremmo provare ad accedere alle variabili locali. Quindi i minifiers non rinominano tutte le variabili che sono potenzialmente accessibili da `eval`. Questo comporta una perdita di qualità della compressione del codice.
80+
I *code minifiers* (strumenti utilizzati per comprimere gli script JS prima di metterli in produzione) rinominano le variabili locali con nomi più brevi (come `a`, `b` etc) in modo da rendere il codice più breve. Questa operazione, solitamente, è sicura. Non lo è, però, se stiamo utilizzando `eval`, poiché al suo interno potremmo provare ad accedere alle variabili locali. Quindi i minifiers non rinominano tutte le variabili che sono potenzialmente accessibili da `eval`. Questo comporta un peggioramento del fattore di compressione del codice.
8181

8282
L'utilizzo delle variabili locali all'interno di `eval` è considerata una bad practice nella programmazione, poiché rende il codice molto più complesso da mantenere.
8383

@@ -103,12 +103,12 @@ let f = new Function('a', 'alert(a)');
103103
f(5); // 5
104104
```
105105

106-
Il costrutto `new Function` viene spiegato più nel dettaglio nel capitolo <info:new-function>. Crea una nuova funzione a partire da una stringa, sempre nello scope globale. Quindi può accedere alle variabili locali. Questo è molto più semplice passargliele esplicitamente come argomenti, come nell'esempio visto sopra.
106+
Il costrutto `new Function`, che viene spiegato più nel dettaglio nel capitolo <info:new-function>, crea una nuova funzione a partire da una stringa. Questa viene creata nel contesto globale, quindi non può accedere alle variabili locali, ma è comunque possibile passargliele esplicitamente come argomenti, come nell'esempio visto sopra.
107107

108108
## Riepilogo
109109

110110
L'invocazione di `eval(code)` esegue una stringa di codice e ne ritorna il risultato dell'ultima istruzione.
111-
- Viene raramente utilizzano in JavaScript moderno, quindi in genere non ne avremo bisogno.
111+
- Viene raramente utilizzato in JavaScript moderno, quindi in genere non ne avremo bisogno.
112112
- Può accedere alle variabili locali. Questa è considerata una bad practice.
113113
- Piuttosto di utilzzare `eval` nello scope globale, utilizzate `window.eval(code)`.
114-
- Oppure, se il codice dovesse avere bisogno di data dallo scope esterno, utilizzate il costrutto `new Function` e passategliele come argomenti.
114+
- Oppure, se il codice dovesse avere bisogno di dati dallo scope esterno, utilizzate il costrutto `new Function` e passateglieli come argomenti.

0 commit comments

Comments
 (0)