【问题标题】:Uglify with anonymous function使用匿名函数进行丑化
【发布时间】:2015-05-24 10:46:30
【问题描述】:

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

'use strict';
!(function () {
  var object = typeof exports != 'undefined' ? exports : this;
}());

当我使用 Google Closure 编译器时,我没有收到任何错误,并且“this”正在引用窗口对象。 但是当我使用 Uglify (使用 mangle true 或 false )时,它会在“this”上得到一个 undefined (所以对象是 undefined 并且我收到错误)。有谁知道为什么?

基本上我可以将 this 更改为 window 并且它会起作用,但我担心的是其他代码、库或其他我将来会丑陋的东西。

注意:我正在使用带有选项的 grunt-contrib-uglify 插件: mangle: true, preserverComments: false, sourceMap: true

【问题讨论】:

  • 那么缩小后的结果是什么?
  • typeof exports != 'undefined' 不好。使用!== 严格要求
  • @m59 你说的“坏”是什么意思?有什么细节吗?
  • @m59 这还不错,因为typeof 运算符肯定会返回一个字符串。
  • @m59 好吧,我猜如果你的 Douglas Crockford 很糟糕 :) 如果你想遵循并倡导更严格的编码标准,那么一定要长寿和繁荣,但事实是它不会在这种情况下没有任何区别。

标签: javascript anonymous-function uglifyjs grunt-contrib-uglify


【解决方案1】:

这是预期的行为:

使用'use strict';,函数的上下文是undefined,而不是全局对象。

【讨论】:

  • 真的吗?不知道那个。我的主要问题是同样的代码在谷歌闭包编译器中工作。
  • @ThiagoMirandadeOliveira “相同的代码”是什么?
  • 对不起我的英语。但在 Google Closure Compiler 上的代码基本相同
  • 值得一提的是,我注意到 Google Closure Compiler 从所有文件中去掉了“use strict”(不知道为什么)。所以这就是它与它一起工作的原因。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 2017-07-21
  • 2014-09-14
  • 1970-01-01
相关资源
最近更新 更多