如果嵌入在網頁中的兩個腳本需要通信,則需要某種全局狀態,通常是全局變量。因此儘管最大限度地減少全局狀態總是一個好主意,但很少會有全局變量相處。Javascript全局名稱空間中的保留標識符
很容易選擇一個與已經標準化不衝突的變量名稱,比如我選擇foo
或Foo
。但未來的兼容性呢?如果新的Web API或新的Ecmascript版本引入了foo
函數或Foo
對象,會發生什麼情況?當第三個腳本位於需要新標準Foo
對象的頁面上時,它會崩潰,因爲我的腳本用完全不同的東西覆蓋了它。
但即使頁面上沒有第三方腳本,我的腳本可能會遇到麻煩。假設我已命名全局變量onfoo
,稍後瀏覽器環境在全局窗口對象上引入新事件foo
。每當這個新的事件被觸發,我的全局對象onfoo
將被稱爲...
因此,我的問題是瀏覽器環境中是否存在任何保留全局標識符的概念或某些名稱是否被認爲是安全的。那麼我應該如何命名我的全局模塊呢?其他名稱空間(如自定義事件名稱)也是如此。
「保留字」的列表對於已發佈的標準已經確立,ECMAScript第6版的草案應包含任何其他保留字(如果有的話)。 (W3C不控制ECMAScript,但它確實控制* DOM * API;這些DOM全局屬性在技術上並不是「保留標識符」。) – user2864740
相信我,沒有未來的JavaScript版本會有'foo'關鍵字。而且,任何未來的變化都可能向後兼容。 –
您可以隨時檢查某個對象是否已經設置了某個屬性。我最喜歡的做法就像'(「窗口中的位置」),以檢查位置是否是窗口中的關鍵字。這樣你就可以檢查一個名字是否被採用,並給出一個備份+記錄到後端,你的變量被採用。 – gpgekko