Javascript 带匿名函数的丑陋

Javascript 带匿名函数的丑陋,javascript,anonymous-function,uglifyjs,grunt-contrib-uglify,Javascript,Anonymous Function,Uglifyjs,Grunt Contrib Uglify,我有一个像这样的.js,我正在压缩它: 'use strict'; !(function () { var object = typeof exports != 'undefined' ? exports : this; }()); 当我使用Google闭包编译器时,我没有得到任何错误,“this”引用的是窗口对象。 但当我使用丑陋(mangle true或false)时,它在“this”上得到一个未定义的值(因此对象未定义,我收到错误)。有人知道为什么吗 基本上,我可以把this窗口改成

我有一个像这样的.js,我正在压缩它:

'use strict';
!(function () {
  var object = typeof exports != 'undefined' ? exports : this;
}());
当我使用Google闭包编译器时,我没有得到任何错误,“this”引用的是窗口对象。 但当我使用丑陋(mangle true或false)时,它在“this”上得到一个未定义的值(因此对象未定义,我收到错误)。有人知道为什么吗

基本上,我可以把this窗口改成this,它会工作的,但我担心的是其他代码、lib或其他我将来要修改的东西

注意:我使用的grunt contrib uglify插件具有以下选项:
mangle:true,preserverComments:false,sourceMap:true

这是预期的行为:


使用
“严格使用”函数的上下文是未定义的,不是全局对象。

这是预期行为:


使用
“严格使用”函数的上下文是未定义的,不是全局对象。

那么缩小后的结果是什么?
导出类型!='未定义的“
不正确。严格遵守
==@m59“坏”是什么意思?有什么细节吗?@m59不错,因为
typeof
操作符肯定会返回一个字符串。@m59好吧,如果你的道格拉斯·克罗克福德(Douglas Crockford)我猜是这样的话,那就不好了:)如果你想活下去并提倡更严格的编码标准,那就千方百计地长寿和繁荣,但事实是,在这种情况下,它不会有任何区别。那么缩小后的结果是什么?
typeof exports!='未定义的“
不正确。严格遵守
==@m59“坏”是什么意思?有什么细节吗?@m59不错,因为
typeof
操作符肯定会返回一个字符串。@m59好吧,如果你的道格拉斯·克罗克福德(Douglas Crockford)我猜是这样的话,那就不好了:)如果你想生活在更严格的编码标准下,那就一定能长寿、兴旺,但事实是,在这种情况下,这不会有任何区别。真的吗?我不知道。我的主要问题是,谷歌闭包编译器中的代码非常相同。@ThiagoMirandadeOliveira“非常相同的代码”是什么?对不起,我的英语很差。但是基本上谷歌闭包编译器上的代码都是一样的。为了更好,我注意到谷歌闭包编译器从所有文件中去掉了“use strict”(不知道为什么)。这就是为什么它能用它。谢谢你的帮助!真正地我不知道。我的主要问题是,谷歌闭包编译器中的代码非常相同。@ThiagoMirandadeOliveira“非常相同的代码”是什么?对不起,我的英语很差。但是基本上谷歌闭包编译器上的代码都是一样的。为了更好,我注意到谷歌闭包编译器从所有文件中去掉了“use strict”(不知道为什么)。这就是为什么它能用它。谢谢你的帮助!