Come dichiarare una variabile globale in JavaScript?

Come posso dichiarare una variabile globale in JavaScript?

Se devi generare variabili globali nel codice di produzione (che dovrebbero essere evitate), devi sempre dichiararle esplicitamente :

window.globalVar = "This is global!"; 

Mentre è ansible definire una variabile globale semplicemente omettendo var (assumendo che non ci sia alcuna variabile locale con lo stesso nome), così facendo genera un global implicito , che è una cosa brutta da fare e genererebbe un errore in modalità strict .

Se questa è l’unica applicazione in cui utilizzerai questa variabile, l’approccio di Felix è eccellente. Tuttavia, se stai scrivendo un plugin jQuery, considera “namespacing” (dettagli sulle virgolette successive …) variabili e funzioni necessarie sotto l’object jQuery. Ad esempio, attualmente sto lavorando a un menu popup di jQuery che ho chiamato miniMenu. Così, ho definito un miniMenu “namespace” sotto jQuery, e posto tutto lì.

Il motivo per cui uso le virgolette quando parlo di spazi dei nomi javascript è che non sono realmente spazi dei nomi nel senso normale. Invece, uso solo un object javascript e metto tutte le mie funzioni e variabili come proprietà di questo object.

Inoltre, per praticità, di solito sottospazio lo spazio dei nomi del plugin con un namespace i per cose che dovrebbero essere usate solo internamente all’interno del plugin, in modo da nasconderlo dagli utenti del plugin.

Ecco come funziona:

 // An object to define utility functions and global variables on: $.miniMenu = new Object(); // An object to define internal stuff for the plugin: $.miniMenu.i = new Object(); 

Ora posso solo fare $.miniMenu.i.globalVar = 3 o $.miniMenu.i.parseSomeStuff = function(...) {...} ogni volta che ho bisogno di salvare qualcosa a livello globale, e continuo a tenerlo fuori dal spazio dei nomi globale.

Con jQuery puoi farlo, indipendentemente da dove si trova la dichiarazione:

 $my_global_var = 'my value'; 

E sarà disponibile ovunque. Lo uso per creare rapidamente gallerie di immagini, quando le immagini sono distribuite in luoghi diversi, in questo modo:

 $gallery = $('img'); $current = 0; $gallery.each(function(i,v){ // preload images (new Image()).src = v; }); $('div').eq(0).append('  '); $('.next').click(function(){ $current = ( $current == $gallery.length - 1 ) ? 0 : $current + 1; $('#gallery').hide().html($gallery[$current]).fadeIn(); }); $('.prev').click(function(){ $current = ( $current == 0 ) ? $gallery.length - 1 : $current - 1; $('#gallery').hide().html($gallery[$current]).fadeIn(); }); 

Suggerimento : esegui tutto questo codice nella console in questa pagina 😉

Ecco un esempio di base di una variabile globale a cui possono accedere le altre funzioni. Ecco un esempio dal vivo per te: http://jsfiddle.net/fxCE9/

 var myVariable = 'Hello'; alert('value: ' + myVariable); myFunction1(); alert('value: ' + myVariable); myFunction2(); alert('value: ' + myVariable); function myFunction1() { myVariable = 'Hello 1'; } function myFunction2() { myVariable = 'Hello 2'; } 

Se lo fai all’interno di una funzione jquery ready () assicurati che la tua variabile sia all’interno della funzione ready () insieme alle altre funzioni.

Dichiarare la variabile al di fuori delle funzioni

 function dosomething(){ var i = 0; // can only be used inside function } var i = ''; function dosomething(){ i = 0; // can be used inside and outside the function } 

Il modo migliore è usare le closures , perché l’object window diventa molto, molto ingombro di proprietà.

html

         

Hello !

init.js (basato su questa risposta )

 var MYLIBRARY = MYLIBRARY || (function(){ var _args = {}; // private return { init : function(Args) { _args = Args; // some other initialising }, helloWorld : function(i) { return _args[i]; } }; }()); 

script.js

 // Here you can use the values defined in the html as if it were a global variable var a = "Hello World " + MYLIBRARY.helloWorld(2); alert(a); 

Ecco il plnkr . Spero che aiuti!