У меня есть такой .js, и я его уплотняю:
'use strict';
!(function () {
var object = typeof exports != 'undefined' ? exports : this;
}());
Когда я использую компилятор Google Closure, я не получаю никаких ошибок, а «это» ссылается на объект окна. Но когда я использую Uglify (с mangle true или false), он получает неопределенное значение для «этого» (поэтому объект не определен, и я получаю сообщение об ошибке). Кто-нибудь знает, почему?
По сути, я могу просто изменить это на окно, и оно будет работать, но меня беспокоят другие коды, библиотеки или что-то еще, что я буду уродовать в будущем.
Примечание. Я использую плагин grunt-contrib-uglify с параметрами: mangle: true, preserverComments: false, sourceMap: true.
typeof exports != 'undefined'
плохо. Сделайте это строгим с!==
- person m59   schedule 21.03.2015typeof
обязательно вернет строку. - person Pointy   schedule 21.03.2015!-
. Есть ли проблемы с этим в этом конкретном случае? это нормально только потому, что в данном случае это не может вызвать проблемы --- для разработчика нормально принимать обдуманные решения, а не просто следовать догмам (которые не имеют (или имеют?) вескую техническую причину) - person zerkms   schedule 21.03.2015===
и!==
В большинстве случаев я знаю (действительно действительно знаю), какие типы я сравниваю, так почему я должен добавлять этот дополнительный=
в первую очередь? - person mmgross   schedule 21.03.2015===
быстрее, чем==
? - person zerkms   schedule 21.03.2015use strict
? Например, когда кодstrict
, тогдаthisBind
этоundefined
. Провел там добрых 10 минут, но никаких следов. - person zerkms   schedule 21.03.2015