簡體   English   中英

在javascript中返回多個值?

[英]Returning multiple values in javascript?

有沒有辦法使用一種類似C#的outref參數修飾符與Javascript來做這樣的事情:

function myManyReturnFunction(number1, number2, out x, out y) {
    x = number1 * number2;
    y = number1 / number2;

    return true;
}

var height1, height2 = 0;
var check = myManyReturnFunction(1,1, out height1, out hight2);

我也想改變變量的引用。 所以是的,通過引用傳遞參數。

function myManyReturnFunction(number1, number2) {
    return {
        x: number1 * number2,
        y: number1 / number2
    }
}

而且您不需要xy參數,只需調用:

var result = myManyReturnFunction(6, 9);
var x = result.x;
var y = result.y;

你可以創建一個“對象”......

function getObj(){
var objOut = new Object();
objOut.name = "Smith";
objOut.State = "Arkansas";

return objOut;
}

如果在外部全局范圍內定義'out'變量,如果你的函數可以在函數內部重新分配,如下所示:

var height1 = 0, height2 = 0;

function myManyReturnFunction(number1, number2) {
    height1 = number1 * number2;
    height2 = number1 / number2;

    return true;
}


var check = myManyReturnFunction(1,1);

您還可以創建一個對象,然后可以將其傳遞給您的函數,該函數可以在函數中進行修改,如下所示:

var myValues = {}

function setValues(num1, num2, vals) {
  vals.x = num1 * num2;
  vals.y = num1 / num2;

  return True;
}

setValues(1, 1, myValues);

有幾種方法可以在JavaScript中返回多個值。 您始終能夠在數組中返回多個值:

function f() {
    return [1, 2];
}

並像這樣訪問它們:

var ret = f();
document.write(ret[0]); // first return value

但是在JavaScript 1.7中添加了解構賦值的語法要好得多(如果你很幸運能夠瞄准一個保證支持它的環境(例如Firefox擴展)):

var a, b;
[a, b] = f();
document.write("a is " + a + " b is " + b + "<br>\n");

另一種選擇是返回包含您的值的對象文字:

function f() {
    return { one: 1, two: 2 };
}

然后可以通過名稱訪問:

var ret = f();
document.write(ret.one + ", " + ret.two);

當然,你可以做一些非常可怕的事情,例如修改全局范圍甚至設置函數本身的屬性:

function f() {
    f.one = 1;
    f.two = 2;
}

f();

document.write(f.one + ", " + f.two);

更多閱讀(以及其中一些例子的來源):

https://developer.mozilla.org/en/New_in_JavaScript_1.7#Destructuring_assignment_(Merge_into_own_page.2fsection

您可以返回非基本類型:

function blah() {
  return { name: 'john', age: 23 };
};

var x = blah();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM