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包在了生命中,但它仍然不起作用。