2013-11-02 11 views
18

Rozważmy następujący kod (demo):zwrócić dwa zmienne w funkcji jednej

function test(){ 
    var h = 'Hello'; 
    var w = 'World'; 
    return (h, w); 

} 

var test = test(); 

alert(test); 

Podczas wykonywania funkcji test powraca jedynie drugą wartość (tj 'World'). Jak sprawić, by zwracał wiele wartości?

+1

Również: http: // stackoverflow.com/questions/10221445/return-multiple-variables-from-a-javascript-function – bfavaretto

Odpowiedz

28

Nie można jednoznacznie zwrócić dwóch zmiennych z pojedynczej funkcji, ale istnieją różne sposoby łączenia tych dwóch zmiennych w celu ich zwrócenia.

Jeśli nie trzeba przechowywać zmienne rozdzielone, można po prostu złączyć je bezpośrednio tak:

function test(){ 
    var h = 'Hello'; 
    var w = 'World'; 
    var hw = h+w 
    return (hw); 
} 
var test = test(); 
alert(test); 

Byłoby to alert „HelloWorld”. (Jeśli chciał przestrzeń tam, należy użyć var hw = h+" "+w zamiast

Jeśli trzeba zachować dwóch zmiennych rozdzielonych, można umieścić je na tablicy tak:.

function test(){ 
    var h = "Hello"; 
    var w = "World"; 
    var hw=[h,w]; 
    return hw; 
} 
var test = test(); 
alert(test); 

Pozwala to na h i w wartości są nadal dostępne pojedynczo jako test[0] i test[1], odpowiednio, jednak alert (test) tutaj wyświetli "Hello, World" ze względu na sposób alertu() obsługuje tablice (to znaczy, że drukuje listę oddzielonych przecinkami każdy element w tablicy sekwencyjnie) .Jeśli chcesz uzyskać ten sam wynik co przykładowy kod, musisz użyć czegoś takiego jak join(). join() skonstruuje ciąg znaków z tablicy, pobiera jeden argument, który służy jako separator między elementami. Aby odtworzyć dwa alerty z mojego pierwszego przykładu, musisz użyć odpowiednio alert(test.join("")) i alert(test.join(" ").

Mój przykład może zostać nieznacznie skrócony, pomijając tworzenie zmiennej hw i bezpośrednio zwracając tablicę. W takim przypadku test() wyglądałby następująco:

function test(){ 
    var h="Hello"; 
    var w="World"; 
    return [h, w]; 
} 

Może to być również wykonane jako obiekt z return { h : h, w : w };, w którym to przypadku uzyskania dostępu do pojedynczych zmiennych jak test.h i test.w odpowiednio.

2

Możesz zwrócić tablicę lub nowy obiekt.

15
function test(){ 
var h = 'Hello'; 
var w = 'World'; 
return {h:h,w:w} 

} 

var test = test(); 

alert(test.h); 
alert(test.w); 

Spróbuj

+0

Co by się stało, gdybyś miał argumenty wewnątrz parametrów funkcji? – TheAmazingKnight

10

comma operator ocenia każdy argument, a następnie zwraca wartość ostatniego.

trzeba by albo zwraca tablicę:

return [h, w]; 

... lub obiekt:

return { h : h, w : w }; 

które chcesz potem użyć jako:

var test = test(); 
alert(test[0]); // "hello" - in the case of the array version 

... lub:

var test = test(); 
alert(test.w); // "world" in the case of the object version 
Powiązane problemy