aboutsummaryrefslogtreecommitdiff
path: root/files/it/web/javascript/reference/statements/var/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/it/web/javascript/reference/statements/var/index.html')
-rw-r--r--files/it/web/javascript/reference/statements/var/index.html221
1 files changed, 221 insertions, 0 deletions
diff --git a/files/it/web/javascript/reference/statements/var/index.html b/files/it/web/javascript/reference/statements/var/index.html
new file mode 100644
index 0000000000..41ee508d3c
--- /dev/null
+++ b/files/it/web/javascript/reference/statements/var/index.html
@@ -0,0 +1,221 @@
+---
+title: var
+slug: Web/JavaScript/Reference/Statements/var
+tags:
+ - Dichiarazioni
+ - Globali
+ - JavaScript
+ - Locali
+ - Valore
+ - Variabili
+ - funzione
+translation_of: Web/JavaScript/Reference/Statements/var
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p>La dichiarazione <strong><code>variabile</code> </strong> dichiara una variabile, opzionalmente inizializzabile ad un valore.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/statement-var.html")}}</div>
+
+
+
+<h2 id="Sintassi">Sintassi</h2>
+
+<pre class="syntaxbox">var <em>nomevariabile1 [</em>= <em>valore1] [</em>, <em>nomevariabile2 [</em>= <em>valore2] </em><em>... [</em>, <em>nomevariabileN [</em>= <em>valoreN]]]</em>;</pre>
+
+<dl>
+ <dt><code>nomevariabileN</code></dt>
+ <dd>Il nome della variabile. Può essere qualunque identificatore legale.</dd>
+</dl>
+
+<dl>
+ <dt><code>valoreN</code></dt>
+ <dd>Valore iniziale della variabile. Può essere qualunque espressione legale. Il valore di default è <em>undefined</em> (non definito).</dd>
+</dl>
+
+<h2 id="Descrizione"> Descrizione</h2>
+
+<p>Le dichiarazioni di variabile, ovunque appaiano, sono processate prima dell'esecuzione di qualsiasi codice. L'ambiente di una variabile dichiarata con <code>var</code> è il suo attuale <em>contesto di esecuzione</em>, che è la funzione di chiusura o, per le variabili dichiarate al di fuori di qualsiasi funzione, globale. Se si dichiara nuovamente una variabile JavaScript, il suo valore non sarà perso.</p>
+
+<p>Assegnando un valore a una variabile non dichirata la rende implicitamente globale (diventa una proprietà dell'oggetto) quando viene eseguita. Le differenze fra variabili dichiarate e non dichiarate sono:</p>
+
+<p>1. Le variabili dichiarate sono legate al contesto in cui sono dichiarate. Quelle non dichiarate sono sempre globali.</p>
+
+<pre class="brush: js">function x() {
+ y = 1; // Genera un ReferenceError in strict mode
+ var z = 2;
+}
+
+x();
+
+console.log(y); // scrive "1" in console
+console.log(z); // Genera un ReferenceError: z non è definita fuori dalla funzione x
+</pre>
+
+<p>2. Variabili dichiarate sono create prima dell'esecuzione del codice. Variabili non dichiarate non esistono finchè il codice assegnato loro non viene eseguito.</p>
+
+<pre class="brush: js">console.log(a); // Genera un ReferenceError.
+console.log('still going...'); // Non verrà eseguito.</pre>
+
+<pre class="brush: js">var a;
+console.log(a); // scrive in console "undefined" o "" a seconda del browser usato.
+console.log('still going...'); // scrive in console "still going...".</pre>
+
+<p>3. Variabili dichiarate diventano una proprietà non configurabile del loro contesto di esecuzione (funzione o globale). Quelle non dichiarate sono configurabili (per esempio, possono essere cancellate).</p>
+
+<pre class="brush: js">var a = 1;
+b = 2;
+
+delete this.a; // Genera un TypeError in strict mode. Altrimenti fallisce senza generare messaggi.
+delete this.b;
+
+console.log(a, b); // Genera un ReferenceError.
+// La proprietà 'b' è stata cancellata e non esiste più.</pre>
+
+<p>A causa di queste tre differenze, il fallimento della dichiarazione di variabile porta molto probabilmente a risultati inaspettati. Pertanto <strong>è raccomandato di dichiarare sempre le variabili, indipendentemente dal loro contesto di appartenenza (funzione o globale).</strong> In ECMAScript 5 <a href="/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode">strict mode</a>, assegnare una variabile non dichiarata genera un errore.</p>
+
+<h3 id="Hoisting_di_var">Hoisting di var</h3>
+
+<p>Poichè le dichiarazioni di variabile (come le dichiarazioni in generale) sono processate prima dell'esecuzione del codice, dichiararne una in qualsiasi punto del codice è equivalente al dichiararle in cima. Questo significa anche che quella variabile può essere usata prima della dichiarazione. Questo comportamento è chiamato "hoisting" (sollevamento, innalzamento), poichè sembra che la dichiarazione di variabile sia portata in cima alla funzione o al codice globale.</p>
+
+<pre class="brush: js">bla = 2;
+var bla;
+// ...
+
+// è implicitamente interpretato come:
+
+var bla;
+bla = 2;
+</pre>
+
+<p>Per questa ragione, è consigliato sempre dichiarare le variabili in cima al loro ambiente (in cima al codice globale o della funzione in cui appaiono) al fine di rendere chiaro quali variabili appartengono alle funzioni (locali) e quali no.</p>
+
+<p>È importante precisare che l'hoisting è applicato alla dichiarazione della variabile, ma non all'inizializzazione del suo valore. Il valore verrà infatti assegnato al raggiungimento della dichiarazione :</p>
+
+<pre class="brush: js">function fai_qualcosa() {
+  console.log(bar); // non definito
+  var bar = 111;
+  console.log(bar); // 111
+}
+
+// è implicitamente interpretato come:
+function fai_qualcosa() {
+  var bar;
+  console.log(bar); // non definito
+ bar = 111;
+  console.log(bar); // 111
+}
+</pre>
+
+<p> </p>
+
+<h2 id="Esempi">Esempi</h2>
+
+<h3 id="Dichiarare_e_inizializzare_due_variabili">Dichiarare e inizializzare due variabili</h3>
+
+<pre class="brush: js">var a = 0, b = 0;
+</pre>
+
+<h3 id="Assegnare_un_singolo_valore_stinga_a_due_variabili">Assegnare un singolo valore stinga a due variabili</h3>
+
+<pre class="brush: js">var a = 'A';
+var b = a;
+
+// è come dire:
+
+var a, b = a = 'A';
+</pre>
+
+<p>Prestare attenzione all'ordine:</p>
+
+<pre class="brush: js">var x = y, y = 'A';
+console.log(x + y); // non definito
+</pre>
+
+<p>Qui, <code>x</code> e <code>y</code> sono dichiarate prima dell'esecuzione del codice, gli assegnamenti verranno eseguiti in seguito. Nel momento in cui "<code>x = y</code>" viene valutato, <code>y</code> esiste quindi nessun <code>ReferenceError</code> viene generato e il suo valore risulta essere '<code>undefined</code>' (non definit). Quindi, <code>x</code> è assegnata ad un valore non definito. Ora, ad <code>y</code> è assegnato il valore 'A'. Di conseguenza, dopo la prima riga, <code>x === undefined &amp;&amp; y === 'A'</code>. Da qui il risultato.</p>
+
+<h3 id="Inizializzazione_di_più_variabili">Inizializzazione di più variabili</h3>
+
+<pre class="brush: js">var x = 0;
+
+function f() {
+ var x = y = 1; // x è dichiarata localmente. y invece no!
+}
+f();
+
+console.log(x, y); // Genera un ReferenceError in strict mode (y non è definita). 0, 1 altrimenti.
+// In modalità non-strict mode:
+// x è la globale come si ci aspettava
+// però, y è uscita fuori dalla funzione!</pre>
+
+<h3 id="Globali_implicite_e_ambienti_esterni_alle_funzioni">Globali implicite e ambienti esterni alle funzioni</h3>
+
+<p><span lang="it">Le variabili che sembrano essere globali implicite possono essere riferimenti a variabili nell'ambito di una funzione esterna:</span></p>
+
+<pre class="brush: js">var x = 0; // x è dichiarata dentro l'ambiente file, poi le è assegnato valore 0
+
+console.log(typeof z); // undefined, poichè z ancora non esiste
+
+function a() { // quando a è chiamata,
+ var y = 2; // y è dichiarata dentro l'ambiente della funzione a, e le è assegnato valore 2
+
+ console.log(x, y); // 0 2
+
+ function b() { // quando b è chiamata
+ x = 3; // assegna 3 all'esistente ambiente x, non crea una nuova variabile globale
+ y = 4; // assegna 4 all'esistente esterna y, non crea una nuova variabile globale
+ z = 5; // crea una nuova variabile globale z e le assegna valore 5.
+ } // (Throws a ReferenceError in strict mode.)
+
+ b(); // chiamare b crea z come variabile globale
+ console.log(x, y, z); // 3 4 5
+}
+
+a(); // chiamando a si richiama b
+console.log(x, z); // 3 5
+console.log(typeof y); // non definito, perchè y è locale alla funzione a</pre>
+
+<h2 id="Specifiche">Specifiche</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specifica</th>
+ <th scope="col">Stato</th>
+ <th scope="col">Commento</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Definizione iniziale, implementata in JavaScript 1.0</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.2', 'var statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-variable-statement', 'variable statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-variable-statement', 'variable statement')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Compatibilità_Browser">Compatibilità Browser</h2>
+
+
+
+<p>{{Compat("javascript.statements.var")}}</p>
+
+<h2 id="Guarda_anche">Guarda anche</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/let"><code>let</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/const"><code>const</code></a></li>
+</ul>