2013-07-31 23 views
12

Una semplice domanda Javascript, ad esempio, ho un app.js Angular come questo;Variabili globali in modalità rigorosa JavaScript

'use strict'; 

var eventsApp = angular.module('eventsApp',[]); 

Ho letto che l'uso di "use strict" in all'inizio di un file JavaScript rende tutti Vars in quel file da trattare in modalità rigorosa, il che significa che si è generato un errore quando si utilizza una variabile globale (?) , ma come possiamo accedere a quell'oggetto "eventApp" da tutti i nostri controller e servizi se questo non è nell'ambito globale?

risposta

13

L'ipotesi errata è che in modalità rigorosa tutte le variabili globali non sono consentite. In realtà solo undefined variabili globali generano un errore. (In realtà che, fondamentalmente, non si poteva fare nulla, se non è possibile utilizzare qualsiasi variabili globali Ci deve essere almeno qualcosa in ambito globale..)

Ad esempio:

"use strict"; 

var a = "foo"; 
var b; 

(function() { 
    a = "bar"; // this is ok, initialized earlier 
    b = "baz"; // this is also ok, defined earlier 
    c = "qux"; // this is not, creating an implicit global 
})(); 

Utilizzare le variabili a o non è un problema, ma c genererà un errore. Non dovrebbero esserci problemi nell'uso della variabile eventApp nell'esempio.

+0

Tnx, se var a non è stato inizializzato con "foo", è anche un errore? – Spring

+0

Finché è definito è ok, quindi 'var a;' è sufficiente. – JJJ

+0

Voglio dire usando solo var a; e non iniziare più da nessuna parte in quel file – Spring

4

Non è necessario fare riferimento allo eventsApp perché angolare conterrà un riferimento all'oggetto con il nome "eventiApp" che si sta utilizzando per definire il modulo.

Così, in tutti gli altri file si può semplicemente utilizzare:

angular.module('eventsApp'); 

per ottenere l'accesso al modulo.

+0

srry thi si abit confusing, quindi intendi eventiApp non è globale? – Spring

+0

Quello che sto dicendo è che non è necessario fare riferimento a 'eventsApp' in altri file. In effetti, non hai nemmeno bisogno di impostare quella variabile. Angular è felice se si definisce un modulo come questo: 'angular.module ('eventsApp', []);' e quindi registra un servizio su un modulo (in un altro file) come questo: 'angular.module ('eventsApp') .factory ('servizio'); ' –

+0

Vedo il tuo punto, ma la mia domanda oltre a quella angolare, var eventsApp è globale o no? e capisco che è globale/finestra – Spring