【问题标题】:Javascript condensing - defining many variables in one lineJavascript 压缩 - 在一行中定义多个变量
【发布时间】:2013-07-26 17:53:00
【问题描述】:

我们通常的理解是,javascript 中的函数用于通过一次调用来执行代码块。但是,我目前正在一个包含许多函数的系统中工作,这些函数需要定义许多变量,所以我看到了很多重复代码。我很想将变量声明放在一个函数中,这样它们就不会占用一大堆空间,但是类似的东西是否可能?

【问题讨论】:

  • “我目前在一个包含许多函数的系统中工作,这些函数需要定义许多变量,所以我看到很多重复代码。” 代码是价值 1,024 字。不清楚你在描述什么。 显示是最好的。

标签: javascript performance function definitions


【解决方案1】:

我很想将变量声明放在一个函数中,这样它们就不会占用一大堆空间,但是类似的东西甚至可能吗?

如果你的意思是:

function one() {
   var a, b, c, d, e, f;
   // ...
}
function two() {
   var a, b, c, d, e, f;
   // ...
}

(例如,每个函数都有其自己的变量副本。)

...你想要的

// Doesn't work
function declare() {
   var a, b, c, d, e, f;
}
function one() {
    declare();
    // ...use a, b, etc. here
}
function two() {
    declare();
    // ...use a, b, etc. here
}

不,你不能那样做。

如果在多个地方使用同一组变量,您可以考虑将变量封装在一个对象中。事实上,整个事情听起来可能会被重构为一个对象。

但无需过多重构:

function declare() {
    return {
        a: /*...*/,
        b: /*...*/,
        c: /*...*/,
        d: /*...*/,
        e: /*...*/,
        f: /*...*/,
    };
}
function one() {
    var o = declare();
    // ...use o.a, o.b, etc.
}
function two() {
    var o = declare();
    // ...use o.a, o.b, etc.
}

但同样,这是影响最小的解决方案。就像这样,如果您以可以将事物组织成对象的想法来查看您的整体代码,您会发现比上面更不人工的方式。

【讨论】:

  • 也这么想。 declare 函数甚至不需要,如果对象被声明在所有函数的公共范围内。
  • 此解决方案在这种情况下效果很好。感谢您的帮助!
  • @bfavaretto:不,这里有一个的区别。使用declare 函数,onetwo 获得他们自己的 变量副本。在一个共同的范围内,他们共享。 (这就是上述“例如,每个函数都有自己的变量副本”部分的内容。)
【解决方案2】:

如果我正确理解您想要做什么,最好不要手动执行。你可以只使用一个 minifier,例如 uglify 或 Google 的 Closure Compiler。这些工具可用于显着优化您的 JS 文件的大小,并且您可以保持原始代码的可读性。

【讨论】:

    【解决方案3】:

    有几种解决方案,也许最简单的一种只是依赖闭包:

    (function(){}
        // declare all vars here
        var a = 1, b = 2;
    
        // var a will be available here
        function foo() {
            alert(a);
        }
    
        foo();
    }());
    

    【讨论】:

      猜你喜欢
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多