diff options
Diffstat (limited to 'files/it/glossary/hoisting/index.html')
-rw-r--r-- | files/it/glossary/hoisting/index.html | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/files/it/glossary/hoisting/index.html b/files/it/glossary/hoisting/index.html new file mode 100644 index 0000000000..77186b6b2b --- /dev/null +++ b/files/it/glossary/hoisting/index.html @@ -0,0 +1,74 @@ +--- +title: Hoisting +slug: Glossary/Hoisting +tags: + - Glossário + - JavaScript +translation_of: Glossary/Hoisting +--- +<p>Hoisting (<em>sollevare, issare in italiano</em>) è un termine che <em>non</em> sentirai mai usare in nessuno testo normativo prima di <a href="http://www.ecma-international.org/ecma-262/6.0/index.html">ECMAScript® 2015 Language Specification</a>. L'Hoisting è stato pensato come un modo generico di pensare a come funziona, in Javascript, il contesto di esecuzione (nello specifico le fasi di creazioni e di esecuzione). Il concetto può essere poco chiaro all'inizio.</p> + +<p>Una definizione rigida di Hoisting potrebbe essere: "(durante la fase di <em>compilazione</em>) le dichiarazioni delle variabili e delle funzioni sono fisicamente spostate in cima al codice", ma questo di fatto non è quello che succede. In realtà, le dichiarazioni delle variabili e delle funzioni sono messe in memoria durante la fase di <em>compilazione</em>, ma rimangono esattamente dove le hai scritte nel codice.</p> + +<h2 id="Learn_more">Learn more</h2> + +<h3 id="Technical_example">Technical example</h3> + +<p>Uno dei vantaggi di mettere in memoria la dichiarazione delle funzioni, prima di eseguire qualunque segmento di codice, è che questo ti permette di usare una funzione prima di dichiararla. Per esempio:</p> + +<pre class="brush: js notranslate">function catName(name) { + console.log("My cat's name is " + name); +} + +catName("Tigger"); +/* +Il risultato del codice sopra è: "My cat's name is Tigger" +*/ +</pre> + +<p>Il codice sopra è scritto come chiunque si aspetterebbe. Ora, vediamo cosa succede quando chiamiamo la funzione prima di scriverla:</p> + +<pre class="brush: js notranslate">catName("Chloe"); + +function catName(name) { + console.log("My cat's name is " + name); +} +/* +Il risultato del codice sopra è: "My cat's name is Chloe" +*/ +</pre> + +<p>Anche se chiamiamo la funzione all'inizio del codice, prima che questa sia scritta, il codice continua a funzionare. Questo accade grazie al comportamento del "contesto di esecuzione" (<em>execution context</em>) di Javascript.</p> + +<p>L'Hoisting funziona bene anche con altri tipi di dati (<em>data types)</em> e con le variabili. Le variabili possono essere inizializzate e usate prima di essere dichiarate. Ma non possono essere usate senza inizializzazione.</p> + +<h3 id="Technical_example_2">Technical example</h3> + +<pre class="brush: js notranslate">num = 6; +num + 7; +var num; +/* non restituisce errore perchè num è dichiarata*/ + +</pre> + +<p>Javascript "solleva" (<em>hoists</em>) solo le dichiarazioni, non le inizializzazioni. Se utilizzi una variabile prima di dichiararla e inizializzarla, il suo valore sarà undefined. L'esempio qui sotto dimostra questo comportamento.</p> + +<pre class="brush: js notranslate">var x = 1; // Initialize x +console.log(x + " " + y); // '1 undefined' +var y = 2; // Initialize y + + +// Il codice seguente si comporterà nella stessa maniera del precedente +var x = 1; // Initialize x +var y; // Declare y +console.log(x + " " + y); // '1 undefined' +y = 2; // Initialize y +</pre> + +<h3 id="Technical_reference">Technical reference</h3> + +<ul> + <li><a href="https://www.udemy.com/understand-javascript/">JavaScript: Understanding the Weird Parts</a> - Udemy.com Course</li> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/var">var statement</a> - MDN</li> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/function">function statement</a> - MDN</li> +</ul> |