当前位置:  开发笔记 > 编程语言 > 正文

在JavaScript中声明多个变量

如何解决《在JavaScript中声明多个变量》经验,为你挑选了13个好方法。

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

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

......或者像这样:

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

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



1> Jeremy Ruten..:

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

使用第二种方法,删除第一个或最后一个声明是很烦人的,因为它们包含var关键字和分号.每次添加新声明时,都必须将旧行中的分号更改为逗号.


如果您正在编写希望缩小或稍后打包的代码,则第二种方式允许压缩器(如YUI Compressor)为您提供更小的版本.如果考虑大小,那么我建议尽可能多地遵循JSLint的建议.
jslint声称第二种方式更为正义,但我不同意.
第二种方式是微优化.所有var声明都是一次处理,而不是一次处理一次.在现代浏览器/现代计算机中,这并不重要.
@ 0xc0de:我希望看到将一个语句中的所有变量声明为"高效"的证明.如果您只是根据节省的少量字节来衡量效率,那么也许.但是如果你考虑到可读性和可维护性,我认为你会发现过早优化通常是错误的方法,特别是因为现代浏览器会在执行前传递中收集和初始化范围内的所有变量.就个人而言,我发现所有变量都在一行或一个语句中声明,以便快速理解代码更容易出错.
关于效率,uglifyjs和谷歌闭包编译器都会自动将连续的var语句压缩成一个,使得这一点没有实际意义(据我所知,YUI不会这样做,但我还没有进行过广泛的测试).
只想添加Ben Alman撰写的一篇非常有趣的博客文章的链接,最终说服我使用多个var语句:http://benalman.com/news/2012/05/multiple-var-statements-javascript/
FWIW,当我所在的团队尝试使用单变量方法时,我们似乎在git中遇到了更多的合并问题.这种方式很有意义,因为当你改变任何东西时你必须编辑更多的代码行,正如Ben Alman的文章指出的那样.我们切换回使用多个`var`s.

2> Kenny Ki..:

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

(function () {
var variable1 = "Hello World!" // semicolon is missed out accidently
var variable2 = "Testing..."; // still a local variable
var variable3 = 42;
}());

虽然第二种方式不太宽容:

(function () {
var variable1 = "Hello World!" // comma is missed out accidently
    variable2 = "Testing...", // becomes a global variable
    variable3 = 42; // a global variable as well
}());


如果您使用的是严格模式,那么无论如何都无法创建这样的全局变量.
好点子.如果它们很短,那么写一行就可以避免这个问题:`var variable1 ="Hello World!",variable2 ="Testing ...",variable3 = 42;`.缺少`,`会崩溃,但我同意它有风险

3> 小智..:

每个范围的组织使用一个var语句是很常见的.所有"范围"的方式都遵循类似的模式,使代码更具可读性.此外,无论如何,发动机将它们"升起"到顶部.所以保持你的声明在一起模仿实际发生的事情会更紧密.


您可以将声明保持在一起,而不会使它们共享相同的'var'声明.我理解并接受jslint(你的链接)给出的解释,但我不同意这个结论.如上所述,风格比其他任何事情更重要.在Java世界(以及其他)中,建议使用反向(每行一个声明)以提高可读性.

4> Jason Stackh..:

这样做时更具可读性:

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

但是这样占用更少的空间和代码行:

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

它可以是节省空间的理想选择,但让JavaScript压缩器为您处理它.



5> 小智..:

也许是这样的

var variable1 = "hello world"
, variable2 = 2
, variable3 = "how are you doing"
, variable4 = 42;

除了更改第一个或最后一个变量外,它易于维护和读取.


通常,使用逗号优先,分号会换行以防止出现此问题.var variable1 ="hello world"\n,variable2 = 2 \n,variable3 ="你好吗?"\n,variable4 = 42 \n; \n

6> Brian Campbe..:

这只是个人偏好的问题.这两种方式没有区别,除了用第二种形式保存的几个字节,如果你去掉空白区域.



7> 小智..:

ECMAScript6引入了解构赋值,它非常好用:

[a, b] = [1, 2] a将等于1b将等于2.



8> Kevin Crowel..:
var variable1 = "Hello World!";
var variable2 = "Testing...";
var variable3 = 42;

比以下更具可读性:

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

但他们做同样的事情.



9> Rohit Jindal..:

使用ES6 Destructuring赋值:它将数组中的值或对象的属性解包为不同的变量.

let [variable1 , variable2, variable3] = 
["Hello World!", "Testing...", 42];

console.log(variable1); // Hello World!
console.log(variable2); // Testing...
console.log(variable3); // 42


10> codelion..:

逗号中我唯一但必不可少的用法是for循环:

for (var i = 0, n = a.length; i < n; i++) {
  var e = a[i];
  console.log(e);
}

我去这里查看JavaScript是否正常.

即使看到它起作用,仍然存在一个问题,即n是否是函数的局部.

这验证,n是本地的:

a=[3,5,7,11];
(function l () { for (var i = 0, n = a.length; i < n; i++) {
  var e = a[i];
  console.log(e);
}}) ();
console.log(typeof n == "undefined" ?
  "as expected, n was local" : "oops, n was global");

有一会儿我不确定,在语言之间切换.



11> 小智..:

虽然两者都是有效的,但是使用第二种方法会阻止没有经验的开发人员在所有地方放置var语句并导致提升问题.如果每个函数只有一个var,则在函数的顶部,则整个代码调试更容易.这可能意味着声明变量的行不像某些人所希望的那样明确.

我认为权衡是值得的,如果这意味着让开发人员不再在他们想要的任何地方放弃'var'.

人们可能会抱怨JSLint,我也是这样,但很多都不是为了解决语言问题,而是纠正编码人员的坏习惯,从而防止他们编写的代码出现问题.因此:

"在具有块范围的语言中,通常建议在首次使用的站点声明变量.但是因为JavaScript没有块范围,所以在函数顶部声明所有函数的变量是明智的.建议每个函数使用一个var语句." - http://www.jslint.com/lint.html#scope



12> v1r00z..:

我认为这是个人偏好的问题.我更喜欢以下列方式进行:

   var /* Vars */
            me = this, that = scope,
            temp, tempUri, tempUrl,
            videoId = getQueryString()["id"],
            host = location.protocol + '//' + location.host,
            baseUrl = "localhost",
            str = "Visit W3Schools",
            n = str.search(/w3schools/i),
            x = 5,
            y = 6,
            z = x + y
   /* End Vars */;



13> 小智..:

避免使用单语句版本(单个var)的另一个原因是调试。如果在任何分配行中抛出异常,则堆栈跟踪仅显示一行。

如果您有10个用逗号语法定义的变量,则您将无法直接知道哪一个是罪魁祸首。

单个语句版本不会遭受这种歧义。

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有