2014-04-11 57 views
0

將某些DOM對象聲明爲命名空間內的全局JavaScript變量會是一種好的做法嗎?將DOM對象聲明爲JavaScript全局變量

事情是這樣的:

var MyNS = {}; 

$(document).ready(function(){ 
    MyNS.domObject1 = $('#id1'); 
    MyNS.domObject2 = $('#id2'); 
}); 
+2

通常,您會緩存DOM引用以編寫更快的代碼。然而,將一堆DOM引用保存在命名空間中可能會導致一些不必保留在內存中的內容的引用變慢。通常,您只會在方法/函數中緩存DOM引用,以允許垃圾回收正常進行。 –

回答

1

有些事情要考慮:

1)在JavaScript創建全局變量是不是一個好的做法,每一個全局變量實際上是window全球的財產對象,它已經有很多屬性。這意味着,如果添加全局變量,則可能會混淆現有變量,或者其他一些代碼可能會覆蓋變量。

解決方案:將所需的所有全局變量存儲在單個對象上,並確保該頁面中沒有其他內容將使用該對象。或者根本不使用全局變量。

2)如果您已經可以使用ID訪問這些元素,那麼爲什麼您需要將這些元素全局存儲?即使你想在某個地方有一個直接引用,你也可以將它們作爲$(document).ready函數的變量存儲起來,並且它們對於在那裏聲明的所有te函數都是可見的。

3)要完全避免使用全局變量,你可以巧妙地包裝您的匿名自動執行的功能代碼像這樣的:

(function() { ... }()); 

所有變量聲明這種類型的函數內部會只能在該函數中可見,並且該函數將立即執行,並且通過垃圾收集,您可以解決任何與DOM對象引用過多相關的性能問題,只需使用此匿名函數即可。

4)如果所有這些都失敗了,那麼是的,您通過將所有元素存儲在一個對象中而不是爲每個元素設置一個全局變量來做出正確的決定。