Javascript Uglify.js在if语句中搞乱了事情
我有这个密码Javascript Uglify.js在if语句中搞乱了事情,javascript,uglifyjs,Javascript,Uglifyjs,我有这个密码 if (!win._hb_bids) { win._hb_bids = {}; } win._hb_bids.hb_auction_id = helpers.generateCacheBuster(); if (config.isAmazon) { if ((p._hb_bids = p._hb_bids || {}) && (p._hb_bids.hb_auction_id = e.default.generateCacheBuster()), s.is
if (!win._hb_bids) {
win._hb_bids = {};
}
win._hb_bids.hb_auction_id = helpers.generateCacheBuster();
if (config.isAmazon) {
if ((p._hb_bids = p._hb_bids || {}) && (p._hb_bids.hb_auction_id = e.default.generateCacheBuster()), s.isAmazon)
用Uglify.js翻译成这段代码
if (!win._hb_bids) {
win._hb_bids = {};
}
win._hb_bids.hb_auction_id = helpers.generateCacheBuster();
if (config.isAmazon) {
if ((p._hb_bids = p._hb_bids || {}) && (p._hb_bids.hb_auction_id = e.default.generateCacheBuster()), s.isAmazon)
我假设此代码应该从左到右执行,将\u hb\u bids
属性设置为空对象。相反,我在Chrome调试器中看到的是,首先执行generateCacheBuster(),然后它尝试向p.\u hb\u bids.hb\u auction\u id
,而p.\u hb\u bids
此时是未定义的
为什么会有如此奇怪的执行令?在丑陋之后,如何重写代码以正确工作
更新:
我找到了问题的原因。我让代码的另一部分执行iframe内容刷新,而win
变量指向一个已经被破坏的iframe窗口。这可能导致了这种奇怪的行为。因此,这不是我最初认为并在标题中指出的uglify.js问题。可能没有检测到win对象。如果将第一个条件更改为if(!win&&!win.\u hb\u bids),会发生什么情况?我在调试器中看到win对象,但可能它无法在其上设置属性。我已经把第二个if包在了生命中,但它仍然不起作用。