介绍
我经常使用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
分配给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
变量?
this
赋给一个变量,因为它能提供清晰度。毕竟,this
有许多上下文,所以用另一个名称引用它可以减少歧义。 - caleb531