У меня проблема, когда компилятор 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);
};
почему-то Closure Compiler ссылается H .sa.xa.RECENT_ITEMS вместо х .sa.xa.RECENT_ITEMS
Любая причина, почему компилятор делает это это?
Вероятно, вы получите лучший ответ, если вы продемонстрируете нарушающий код и его контекст. В Closure есть способы указать, что некоторые переменные не должны переименовываться, потому что они ссылаются снаружи. – jfriend00
Я не могу воспроизвести проблему с этим фрагментом кода. Однако я бы попробовал НЕ передавать ваше пространство имен 'nam' в качестве аргумента для ваших анонимных оберток функций и посмотреть, не возникла ли проблема. –
Выглядит хорошо для меня. Возможно, старая версия компилятора Plovr кусает вас или одну из ее настроек. Но, как правило, анонимные закрытия вокруг goog.provides необычны для кода Closure. – John