介绍
我经常使用 Google Closure Compiler 来压缩我的 JavaScript 文件。现在,它似乎很好地压缩了我的代码。
现在,我尝试养成将this
对象存储在局部变量中的习惯,因为this
不能混淆,但局部变量肯定可以混淆。但是,Google Closure Compiler 无法识别这一点,而是删除了局部变量的所有实例,将其替换为this
.
关于优化...
我很清楚在编写代码时应该避免预先优化。但是,我觉得缓存this
是可以接受的,因为这样做可以提供清晰性(因为this
可以有很多上下文,并且用另一个名称引用它会减少歧义)。
例子
下面的代码非常基本,我知道它可能写得不好。但是,代码将准确地展示我面临的问题。
这是压缩前的原始源文件:
(function() {
var that = this;
that.a = 3;
that.b = 4;
this.c = 5;
return that;
}());
现在这里是压缩的源文件。请注意,this
to的分配that
已被删除。
(function(){this.a=3;this.b=4;this.c=5;return this})();
理想情况下,我希望分配以that
某种形式保留,可能类似于以下内容:
(function(){var t=this;t.a=3;t.b=4;t.c=5;return t})();
现在,上面的代码几乎没有节省任何字节,但是当使用更大的脚本时(就像我经常做的那样),节省的钱肯定会加起来。
问题
简而言之,如何防止 Closure Compiler 删除that
上述脚本中的变量?