我对jQuery以外的JavaScript相当陌生,而且我正在阅读JavaScript数组中的随机化&使用带有随机数的Array.sort方法的缺点。我看到建议改为使用Fisher-Yates shuffle。在查看此方法的JavaScript代码时:
Array.prototype.randomize = function()
{
var i = this.length, j, temp;
while ( --i )
{
j = Math.floor( Math.random() * (i - 1) );
temp = this[i];
this[i] = this[j];
this[j] = temp;
}
}
我对这条线感到震惊:
var i = this.length, j, temp;
这里发生了什么?变量是赋予多个值,还是这个简写?
答案 0 :(得分:5)
变量永远不能同时具有多个值。
您提供的代码是
的简写var i = this.length;
var j;
var temp;
上述语法在大多数编程语言中都是合法的。
答案 1 :(得分:2)
var i = this.length, j, temp;
与:
相同var i = this.length;
var j; // here the value is undefined
var temp; // same, temp has a an undefined value
答案 2 :(得分:2)
不,这是以下的简写:
var i = this.length;
var j;
var temp;
答案 3 :(得分:1)
您正在创建三个变量,只有最左边的变量才会生成一个值 - 在这种情况下,无论值this.length
是什么。
正如其他人所指出的那样回答你的问题,它与以下内容相同:
var i = this.length;
var j, temp;
Java,C#和Visual Basic等其他语言允许您使用类似的语法创建变量。即:
即:
// C# and Java
int i = this.length, j, temp;
// which is the same as:
int i = this.length;
int j, temp;
' Visual Basic
Dim i = this.length as Integer, j as Integer, temp as Integer
' Which is the same as:
Dim i = this.length as Integer
Dim j as Integer, temp as Integer
答案 4 :(得分:1)
它只是在一行中多次声明变量。它等同于:
var i, j, temp;
i = this.length;
这相当于:
var i;
var j;
var temp;
i = this.length;
答案 5 :(得分:1)
The specification将变量语句定义为var
关键字,后跟变量声明的列表,用逗号分隔:
VariableStatement :
var VariableDeclarationList ;
VariableDeclarationList :
VariableDeclaration
VariableDeclarationList , VariableDeclaration
请注意VariableDeclarationList
的递归定义。这意味着无限数量的变量声明可以跟随var
关键字。
因此
var foo, bar;
与
相同var foo;
var bar;
相关问题:What is the advantage of initializing multiple javascript variables with the same var keyword?