在JavaScript中声明多个variables

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

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

…或者像这样:

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

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

第一种方法更容易维护。 每一个声明都是单一行中的单个声明,因此您可以轻松地添加,删除和重新sorting声明。

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

除了可维护性,第一种方法消除了事故全局variables创build的可能性:

 (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语句是很常见的。 所有的“范围”都遵循类似的模式,使代码更具可读性。 另外,发动机“升降”他们无论如何顶部。 所以保持你的声明模仿真正发生的事情更密切。

这样做时可读性更好:

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

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

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

它可以节省空间的理想select,但让JavaScript压缩机为您处理。

这只是个人喜好的问题。 这两种方式之间没有区别,除了用第二种forms保存的几个字节,如果你去掉空白。

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

比以下更具可读性:

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

但他们做同样的事情。

也许这样

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

除了更改第一个或最后一个variables时,它很容易维护和读取。

我唯一用于逗号的基本用法是在for循环中:

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

我去了这里看看这是否在JavaScript中可以。

即使看到它的工作,一个问题仍然是n是否是本地的function。

这个validation,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"); 

有一段时间我不确定,在语言之间切换。

虽然两者都是有效的,但是使用第二种方法阻碍了没有经验的开发者将var语句放在整个地方并引起提升问题。 如果每个函数只有一个variables,那么在函数的顶部就可以更容易地debugging整个代码。 这可能意味着声明variables的行不像某些人所希望的那样明确。

我觉得这样做是值得的,如果这意味着要让开发商脱离他们想要的任何地方的“var”,那么这个开发人员就不行了。

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

“在使用块范围的语言中,通常build议在首次使用的站点声明variables,但是由于JavaScript没有块范围,所以在函数顶部声明一个函数variables是明智的。build议每个函数使用一个var语句。“ – http://www.jslint.com/lint.html#scope

我认为这是个人喜好的问题。 我更喜欢以下面的方式来做:

  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 */; 

ECMAScript6引入了解构赋值 ,这很好用:

[a, b] = [1, 2] a等于1, b等于2。

使用ES6解构 赋值 :它将从数组中解压值,或从对象中解压缩到不同的variables中。

 let [variable1 , variable2, variable3] = ["Hello World!", "Testing...", 42]; console.log(variable1); // Hello World! console.log(variable2); // Testing... console.log(variable3); // 42 

“内聚衔接”的概念可以比对象/模块/function更普遍地应用。 它也可以用于这种情况:

OPbuild议的第二个例子已经把所有的variables连接到了同一个语句中,这使得不可能将其中的一行移动到别的地方而不会破坏内容(高耦合)。 他给出的第一个例子使variables赋值相互独立(低耦合)。

“低耦合通常是一个结构良好的计算机系统和良好的devise的标志,并与高凝聚力相结合,支持高可读性和可维护性的总体目标。”

http://en.wikipedia.org/wiki/Coupling_(computer_programming);

所以select第一个。

我认为第一种方法(多个variables)是最好的,因为你可能会以此结束(从使用Knockout的应用程序),这在我看来很难理解:

  var categories = ko.observableArray(), keywordFilter = ko.observableArray(), omniFilter = ko.observable('').extend({ throttle: 300 }), filteredCategories = ko.computed(function () { var underlyingArray = categories(); return ko.utils.arrayFilter(underlyingArray, function (n) { return n.FilteredSportCount() > 0; }); }), favoriteSports = ko.computed(function () { var sports = ko.observableArray(); ko.utils.arrayForEach(categories(), function (c) { ko.utils.arrayForEach(c.Sports(), function (a) { if (a.IsFavorite()) { sports.push(a); } }); }); return sports; }), toggleFavorite = function (sport, userId) { var isFavorite = sport.IsFavorite(); var url = setfavouritesurl; var data = { userId: userId, sportId: sport.Id(), isFavourite: !isFavorite }; var callback = function () { sport.IsFavorite(!isFavorite); }; jQuery.support.cors = true; jQuery.ajax({ url: url, type: "GET", data: data, success: callback }); }, hasfavoriteSports = ko.computed(function () { var result = false; ko.utils.arrayForEach(categories(), function (c) { ko.utils.arrayForEach(c.Sports(), function (a) { if (a.IsFavorite()) { result = true; } }); }); return result; }); 

避免单个语句版本(single var )的另一个原因是debugging。 如果在任何分配行中引发exception,则堆栈跟踪只显示一行。

如果你用逗号语法定义了10个variables,那么你无法直接知道哪个variables是罪魁祸首。

个别陈述版本不会受到这种模糊性的影响。

我相信,在我们开始使用ES6之前,单variables声明的方法既不好也不坏(如果你有内存和'use strict' ,这是真正的口味偏好,但现在事情已经改变了。赞成多线声明:

  1. 现在我们有了两种新的variables, var变得过时了。 到处使用const是一个好习惯,直到你真的需要let 。 所以很多时候你的代码会在代码中间包含variables声明和分配,而且由于块的范围限制,你经常会在块之间移动variables,以防出现小的变化。 我认为用多行声明这样做更方便。

  2. ES6语法变得更加多样化,我们得到了析构函数,模板string,箭头函数和可选的assigments。 当你在单一的var声明中大量使用所有的function时,会伤害到可读性。