You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/99-js-misc/02-eval/1-eval-calculator/solution.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,4 +8,4 @@ alert( eval(expr) );
8
8
9
9
L'utente può inserire qualsiasi testo o codice.
10
10
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.
Copy file name to clipboardExpand all lines: 1-js/99-js-misc/02-eval/article.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,7 +15,7 @@ let code = 'alert("Hello")';
15
15
eval(code); // Hello
16
16
```
17
17
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.
19
19
20
20
Il risultato ritornato da `eval` corrisponde a quello dell'ultima istruzione.
21
21
@@ -30,7 +30,7 @@ let value = eval('let i = 0; ++i');
30
30
alert(value); // 1
31
31
```
32
32
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:
34
34
35
35
```js run no-beautify
36
36
let a =1;
@@ -46,26 +46,26 @@ function f() {
46
46
f();
47
47
```
48
48
49
-
Può quindi modificare le variabili esterne:
49
+
Allo stesso modo, può modificare le variabili esterne:
50
50
51
51
```js untrusted refresh run
52
52
let x =5;
53
53
eval("x = 10");
54
54
alert(x); // 10, valore modificato
55
55
```
56
56
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:
58
58
59
59
```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
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.
69
69
70
70
## Utilizzare "eval"
71
71
@@ -75,9 +75,9 @@ La motivazione è piuttosto semplice: molto tempo fa, JavaScript era un linguagg
75
75
76
76
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).
77
77
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.
79
79
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.
81
81
82
82
L'utilizzo delle variabili locali all'interno di `eval` è considerata una bad practice nella programmazione, poiché rende il codice molto più complesso da mantenere.
83
83
@@ -103,12 +103,12 @@ let f = new Function('a', 'alert(a)');
103
103
f(5); // 5
104
104
```
105
105
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.
107
107
108
108
## Riepilogo
109
109
110
110
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.
112
112
- Può accedere alle variabili locali. Questa è considerata una bad practice.
113
113
- 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