在JavaScript中,这是一个支持缩小的好习惯吗?

时间:2013-02-06 21:38:59

标签: javascript minify

所以在我的JavaScript代码库中,我一直使用var me = this成语来支持缩小。但是我最近开始质疑这个问题,我很想知道使用更聪明的缩小工具是否可以避免将this赋值给变量?

似乎某个工具应该能够检测创建变量以表示this的函数,以便在多次调用this时保存字符。对于布尔值也可以这样做,例如var yes = true, nope = false

我可以使用哪些工具来避免在我的代码库中设置var me = this吗?一般来说,更改代码库以更好地支持缩小是一个好主意吗?

请记住,我确实理解在某些情况下我需要一个分配给this的变量来引用JavaScript闭包内的外部作用域。我正在使用的var me = this仅用于支持缩小。

2 个答案:

答案 0 :(得分:1)

在准备好实时部署代码之前,您不必担心缩小规模。一旦完成,我建议使用Google的闭包编译器来缩小所有代码。请在此处查看:http://code.google.com/p/closure-compiler/

答案 1 :(得分:1)

它不仅支持缩小,还可以用于闭包。当您创建函数时,例如在回调中使用时,您必须在调用函数时注意“this”。在Javascript中开始时常见的错误是错误的“这个”。 “var me = this”模式有助于避免这种情况。例如

function doSomething() {
    var me = this;
    callSomethingAsynchronous(42, function (result) {
        // Here 'this' will depend on the caller of the callback functon.
        me.theResult = result;
    });
}

请注意,像Ext这样的框架不鼓励这样做,并且您将范围变量与回调一起传递。

callSomethingAsynchronous(42, me.handlerFunction, me);

它允许您在原型上保留handlerFunction的定义,而不是继续创建它们。有时闭包只是更好的方法,因为你必须包含仅在运行时已知的信息

function sayHelloInAContrivedWay (name) {
    getTheGreetingAsync(function (greeting) {
        console.log(greeting + name);
    });
}

每当我在函数中多次访问时,我都会使用“var me = this”。缩小器确实将其缩小为单个字符。如果我正在访问子对象,我也会为此创建一个var

function keepInnerWombatFit () {
   var me = this,
       wombat = me.inner.wombat;

   wombat.run();
   wombat.jump();
   wombat.sitDown();

   me.excerciseCount++;
}

我已经看到过一次又一次地输入(或剪切和粘贴)大量嵌套访问的代码,这些代码无法缩小,可能会花费一点性能并且难以阅读和维护。

this.inner.wombat.run();
this.inner.wombat.jump();
this.inner.wombat.sitDown();