2010-07-04 94 views
0

全局狀態通常是不被接受的。不過,我想我可以使用它clientside使我的應用程序更簡單。這可以很好地使用全局變量嗎?

我有一個AJAX網絡應用程序,它在用戶登錄時設置了幾個值 - 用戶ID以及一些其他信息。此信息不會在應用程序的生命週期中發生變化。

我也有一個數據緩存,以儘量減少旅行到服務器。

我可以安全地使所有這些全球? (只讀的用戶信息和緩存)我認爲這會讓它變得更簡單,因爲那樣我就不用擔心在函數之間傳遞值時有時會很尷尬。

本質上,它就像常量,其值在「編譯時」不知道。

在某些方面,DOM本身作爲一種全局狀態 - 我可以將值存儲在HTML中,並且可以從程序中的任何位置訪問它。

+0

您在ajax環境中的全球意義是什麼?在服務器上還是在客戶端上? – 2010-07-04 05:22:06

+0

** clientside **。對不起,缺乏清晰度。 – 2010-07-04 05:38:05

回答

0

如果你知道自己在做什麼,那麼使用全局變量沒有什麼錯誤。嘗試通過將所有「常量」包裝在單個全局對象中來保持它的乾淨。與全局性有關的主要問題是,您與您的全局存儲的任何狀態的單個實例綁定,這可能會或可能不會成爲您的問題。

0

你可以創建一個命名空間,這種方式變量將是全球,但你不必擔心太多衝突和那種東西。 Facebook在它的一些API上做到了這一點。

爲安全起見,在這裏有一個例子安全命名空間的實現:

if(!window.MY_NAMESPACE){ 
    MY_NAMESPACE = { 
    a_variable : "some value", 
    a_function: function(params){ 
     return a_variable; 
    }, 
    }; 
} 

這樣,你得到像全球的東西,沒有在文件中與其他變量發生衝突(或腳本的副本)

0

我認爲完全可以使用全局狀態來達到上述目的。只要確保它們只寫入一次,即在執行過程中不會改變。因此,儘量給他們一些名稱,以免後來不小心覆蓋它們(這在Javascript中始終是危險的 - 僞造var並且您的變量變成全局的,即附加到window對象),並且最好將它們全部放入相同的結構中進一步減少名稱衝突(名稱少,衝突少)的危險。

還要記住,變量不是真的'全球';如果用戶保持登錄狀態,但打開一個新的窗口到您的網站,'全局'變量不見了。在這種情況下,您必須確保不會有不一致性,即服務器假定給定用戶已登錄,則會設置變量。

相關問題