Uglify.js все портит в операторе if - PullRequest
3 голосов
/ 07 октября 2019

У меня есть этот код

if (!win._hb_bids) {
    win._hb_bids = {};
}
win._hb_bids.hb_auction_id = helpers.generateCacheBuster();
if (config.isAmazon) {

, переведенный с помощью Uglify.js в этот код

if ((p._hb_bids = p._hb_bids || {}) && (p._hb_bids.hb_auction_id = e.default.generateCacheBuster()), s.isAmazon)

Я бы предположил, что этот код должен выполняться слева направо, установив _hb_bids свойство пустого объекта. Вместо этого, как я вижу в отладчике Chrome, сначала выполняется generateCacheBuster (), а затем пытается сделать присвоение p._hb_bids.hb_auction_id, а p._hb_bids в данный момент равно undefined.

enter image description here

В чем причина такого странного порядка исполнения? И как код может быть переписан для корректной работы после uglify?

ОБНОВЛЕНИЕ: Я нашел причину проблемы. У меня была другая часть кода, выполняющая обновление содержимого iframe, а переменная win указывала на окно iframe, которое уже было уничтожено. Это, вероятно, вызвало это странное поведение. Так что это была не проблема uglify.js, как я изначально думал и указывал в заголовке.

...