2013-07-31 11 views
12

Eine einfache Javascript-Frage, zum Beispiel habe ich eine Angular app.js so;Globale Variablen im JavaScript strikten Modus

'use strict'; 

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

ich gelesen, dass „use strict“ in Anfang einer Javascript-Datei macht alle Vars in dieser Datei im strikten Modus behandelt werden, was bedeutet, dass es einen Fehler aus, wenn Sie eine globale Variable verwenden (?) Aber wie können wir dann auf dieses "eventApp" -Objekt von all unseren Controllern und Diensten zugreifen, wenn dies nicht global ist?

Antwort

13

Die fehlerhafte Annahme ist, dass im strikten Modus alle globalen Variablen nicht zulässig sind. Eigentlich nur undefined globale Variablen werfen einen Fehler. (In der Tat könnte man im Grunde nichts tun, überhaupt, wenn Sie nicht jeden globale Variablen verwenden, könnten es zumindest etwas im globalen Bereich sein..)

Zum Beispiel:

"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 
})(); 

Verwenden von Variablen a oder b ist kein Problem, aber c wird einen Fehler auslösen. Es sollte keine Probleme geben mit der eventApp Variable in Ihrem Beispiel.

+0

Tnx, wenn Var a nicht mit "foo" initialisiert wurde, dann ist es auch ein Fehler, oder? – Spring

+0

Solange es definiert ist, ist es in Ordnung, also 'var a;' ist genug. – JJJ

+0

Ich meine nur mit var a; und nicht mehr irgendwo in dieser Datei zu initiieren – Spring

4

Sie müssen nicht auf eventsApp verweisen, da angular einen Verweis auf das Objekt mit dem Namen 'eventsApp' enthält, den Sie zum Definieren des Moduls verwenden.

Also, in allen anderen Dateien können Sie nur verwenden:

angular.module('eventsApp'); 

Um Zugang zu dem Modul zu erhalten.

+0

srry thi si abit verwirrend, also meinst du eventsApp ist nicht global? – Spring

+0

Was ich sage ist, dass Sie in anderen Dateien nicht auf "eventsApp" verweisen müssen. Tatsächlich müssen Sie diese Variable nicht einmal einstellen. Angular ist glücklich, wenn Sie ein Modul wie folgt definieren: 'angular.module ('eventsApp', []);' und dann einen Dienst für ein Modul (in einer anderen Datei) wie folgt registrieren: 'angular.module ('eventsApp') .factory ('service'); ' –

+0

Ich sehe Ihren Punkt, aber meine Frage jenseits Winkel, var eventsApp ist global oder nicht? und ich verstehe, es ist global/window – Spring

Verwandte Themen