2013-08-12 4 views
1

Я довольно новичок в JavaScript за пределами jQuery, и я читал о рандомизации в массиве JavaScript & недостатки использования метода Array.sort со случайным числом. Я вижу, что вместо этого рекомендуется использовать Shuffle Fisher-Yates. Глядя на код JavaScript для этого метода: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

Это происходит: http://es5.github.io/#x12.2. –

ответ

5

Переменная никогда не может иметь несколько значений одновременно.

код вы даете это сокращение для

var i = this.length; 
var j; 
var temp; 

Синтаксис как и выше является законным в большинстве языков программирования.

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

Нет, это сокращение для: var i = this.length; var j; var temp;

1

Вы создаете три переменные, и только крайний левый родятся со значением - в этом случае, независимо от значения this.length.

Как отметили все остальные respondig к вам вопросу, это то же самое, как:

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 
1

Это просто множественным объявление переменных в одной строке. Это эквивалентно следующему:

var i, j, temp; 
i = this.length; 

Что эквивалентно следующему:

var i; 
var j; 
var temp; 
i = this.length; 
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?

Смежные вопросы