在 JavaScript 中声明多个变量

IT技术 javascript variables coding-style performance declaration
2021-01-27 14:10:59

在 JavaScript 中,可以像这样声明多个变量:

var variable1 = "Hello, World!";
var variable2 = "Testing...";
var variable3 = 42;

……或者像这样:

var variable1 = "Hello, World!",
    variable2 = "Testing...",
    variable3 = 42;

一种方法比另一种更好/更快吗?

6个回答

第一种方式更容易维护。每个声明都是一行上的单个语句,因此您可以轻松地添加、删除和重新排序声明。

使用第二种方式,删除第一个或最后一个声明很烦人,因为它们分别从var关键字开始并以分号结束。每次添加新声明时,都必须用逗号替换最后一行中的分号。

关于效率,uglifyjs 和 google 闭包编译器都会自动将连续的 var 语句压缩为一个,从而使这一点没有实际意义(据我所知 YUI 不会这样做,但是我还没有进行广泛的测试)。
2021-03-23 14:10:59
@0xc0de:我希望看到在一个语句中将所有变量声明为“有效”的证明。如果您只是根据节省的几个字节来衡量效率,那么也许可以。但是如果你考虑可读性和可维护性,我认为你会发现过早优化通常是错误的方法,特别是因为现代浏览器会在执行前阶段收集和初始化范围内的所有变量。就我个人而言,我发现在一行或一条语句中声明所有变量会使快速理解代码变得更加困难且更容易出错。
2021-03-28 14:10:59
如果您正在编写希望稍后缩小或打包的代码,第二种方法允许压缩器(如 YUI 压缩器)为您提供更小的版本。如果考虑大小,那么我建议尽可能多地遵循 JSLint 的建议。
2021-04-02 14:10:59
jslint 声称第二种方式更合理,但我不同意。
2021-04-02 14:10:59
第二种方式是微优化。所有的 var 声明都是一次性处理的,而不是一次处理一个。这在现代浏览器/现代计算机中并不重要。
2021-04-05 14:10:59

除了可维护性,第一种方法消除了意外创建全局变量的可能性:

(function () {
var variable1 = "Hello, World!" // Semicolon is missed out accidentally
var variable2 = "Testing..."; // Still a local variable
var variable3 = 42;
}());

虽然第二种方式不那么宽容:

(function () {
var variable1 = "Hello, World!" // Comma is missed out accidentally
    variable2 = "Testing...", // Becomes a global variable
    variable3 = 42; // A global variable as well
}());
好点子。如果它们很短,那么写在一行上将避免这个问题:var variable1 = "Hello World!", variable2 = "Testing...", variable3 = 42;. 丢失,会崩溃,但我同意这是有风险的
2021-03-21 14:10:59
如果您使用的是严格模式,则无论如何都无法创建这样的全局变量。
2021-03-23 14:10:59
Possible Fatal Error如果我错过了昏迷,我的文本编辑器会给我一个,为我欢呼吧!
2021-03-29 14:10:59
我喜欢在一行中声明多个变量,因为我认为它看起来更简洁。也就是说,意外声明全局变量是一个真正的危险。在查找内存泄漏时,我遇到了多个实例,因为我使用了分号而不是逗号,所以我不小心一次声明了几个全局变量。
2021-04-02 14:10:59

这样做时它的可读性要好得多:

var hey = 23;
var hi = 3;
var howdy 4;

但以这种方式占用更少的空间和代码行:

var hey=23,hi=3,howdy=4;

它非常适合节省空间,但让 JavaScript 压缩器为您处理。

对于组织来说,每个作用域使用一个var语句是很常见的所有“范围”都遵循类似的模式,使代码更具可读性。此外,无论如何,引擎将它们全部“提升”到顶部。因此,将您的声明放在一起可以更接近地模拟实际发生的情况。

更具可读性?人们将它们放在一行的唯一原因是您提到的特定于 JS 的原因:JS 将所​​有声明移到顶部。如果它不这样做,我们都会声明我们的 vars 最接近它们的使用点。
2021-03-31 14:10:59
您可以将声明放在一起,而无需让它们共享相同的“var”声明。我理解并接受 jslint(您的链接)给出的解释,但我不同意结论。如上所述,风格比什么都重要。在 Java 世界中(除其他外),为了可读性,建议采用相反的方式(每行一个声明)。
2021-04-06 14:10:59

ECMAScript 2015引入了解构赋值,效果很好:

[a, b] = [1, 2]

a将等于1并且b将等于2

如果您想设置许多具有相同值的变量,这很方便。例如,用于在循环中重置为零。
2021-03-13 14:10:59
是的!这就是我要找的。特别是如果您想定义一个二维对或多维值,而不是数组。
2021-03-20 14:10:59
如果您有很长的变量列表,我认为您的方法并不是真正可行的。很难说哪个变量与哪个值相关,并且您没有防止错误的保护是错误合并的情况,在此期间您可能会意外地从数组中删除一个元素。示例: let [aVar, bVar, cVar, xVar, yVar, zVar] = [10, 20, 30, 40, 50]; 所以,我个人不推荐它。
2021-03-27 14:10:59
它没有回答问题,但它可以是上述两种方法的更好替代方案。
2021-04-01 14:10:59