我有一個問題,其中Closure編譯器重命名一個像x.sa.xa這樣的全局變量,但是在引用該全局變量的所有函數中,編譯器將其重命名爲其他類似H.sa.xa的東西Closure編譯器混合變量名稱
當我查看HTML頁面時,我得到一個JavaScript TypeError:H.sa.xa未定義。
// Top-level namespace for all the code
var nam = nam || {};
(function($, nam) {
goog.provide('nam.jsConfig');
nam.jsConfig.cookies = {"RECENT_ITEMS": "recentitems"};
})($, nam);
(function($, nam) {
goog.provide('nam.util.cookie');
nam.util.cookie.readMyCookie = function() {
var ritems_cookie = nam.util.cookie.JSONCookie.get(nam.jsConfig.cookies['RECENT_ITEMS']);
};
})($, nam);
Closure Compiled Code:
x.sa = {};
x.sa.xa = {RECENT_ITEMS:"recentitems"};
H.a = {};
H.a.cookie = {};
H.a.Tm = function() {
var a = H.a.cookie.ja.get(H.sa.xa.RECENT_ITEMS);
};
出於某種原因,關閉編譯器所引用^h .sa.xa.RECENT_ITEMS代替X .sa.xa.RECENT_ITEMS
有什麼理由編譯器是這樣做呢?
如果您顯示違規代碼及其上下文,您可能會得到更好的回覆。 Closure可以指定某些變量不應該被重命名,因爲它們是在外部引用的。 – jfriend00 2013-03-24 15:44:17
我無法重現該代碼段的問題。不過,我會嘗試不傳遞你的名字空間'nam'作爲你的匿名函數包裝的參數,並看看問題是否仍然存在。 – 2013-03-25 11:45:12
對我來說也很好。也許Plovr的舊編譯器版本咬你或它的一個定製。但通常,goog.provide周圍的匿名閉包對於Closure代碼來說並不常見。 – John 2013-03-26 15:05:38