2013-07-31 72 views
12

一個簡單的Javascript問題,例如我有一個像這樣的Angular app.js;JavaScript嚴格模式下的全局變量

'use strict'; 

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

,我讀了使用JavaScript文件的開始「使用嚴格」,使該文件中的所有瓦爾在嚴格模式,這意味着當你使用一個全局變量就會拋出一個錯誤來處理(?) ,但是如果不在全局範圍內,我們如何從我們所有的控制器和服務中訪問該「eventApp」對象?

回答

13

錯誤的假設是,在嚴格模式下所有全局變量都是不允許的。其實只有undefined全局變量會引發錯誤。 (事實上​​,你根本不可能在所有如果你不能使用任何全局變量做任何事情必須有在全球範圍內至少東西。)

例如:

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

使用變量ab不是問題,但c會引發錯誤。在你的例子中使用eventApp變量應該沒有問題。

+0

Tnx,如果var a未用「foo」初始化,那麼它也是錯誤的權利? – Spring

+0

只要它被定義好就可以,所以'var a;'就足夠了。 – JJJ

+0

我的意思是隻使用var a;而不是在該文件的任何地方再次啓動 – Spring

4

您不必引用eventsApp,因爲angular將通過名稱'eventsApp'來保存對象的引用,該名稱用於定義模塊。

因此,在所有其他文件,你可以只使用:

angular.module('eventsApp'); 

要訪問的模塊。

+0

srry thi si abit令人困惑,所以你的意思是eventsApp不是全球性的? – Spring

+0

我在說的是,你不需要在其他文件中引用'eventsApp'。事實上,你甚至不需要設置該變量。如果你像這樣定義一個模塊,Angular會很高興:'angular.module('eventsApp',[]);'然後像下面這樣在模塊(在另一個文件中)註冊一個服務:'angular.module('eventsApp') .factory('service');' –

+0

我明白了你的觀點,但是我的問題超出了角度,var eventsApp是全局的或者不是?我知道這是全球/窗口 – Spring