在高階程式語言裏面的函數宣告,參數都可以用byval byref來將參數設定為傳值或傳位(也有人說是傳址,反正就是傳入參數的位址啦)。但javascript是個死硬派,堅持所有的參數都是傳值,只有物件才是傳位(事實上是物件這個變數裏面只保留了物件的位址,而我們拿的時候因為是物件所以直接就變成物件了,根本上還是傳值啦)。那麼有甚麼方法可以讓javascript傳回多個值呢?
第一種方法,使用全域變數,這個方法是簡單,但是很呆,如果這樣的東西一多,你的全域變數就滿街跑了。應該不用寫範例吧。
第二種方法,使用陣列方式傳回。舉例:
function Foo() {
return [true,'something'];
}
result = Foo();
alert(result(1));
第三種方法比第二種聰明一點,使用json陣列。舉例:
function Foo() {
return {val1:true, val2:'something'};
}
result = Foo();
alert(result['val1']);
第四種方法,使用callback函數技巧。舉例:function Foo(callback) {
callback(false,'something');
}
function FooCallback(val1, val2) {
alert(val2);
}
Foo(FooCallback);
也可以不用宣告callback函數,直接使用匿名函數(用了jQuery之後常常見到),例如:
function Foo(callback) {
callback(false,'something');
}
Foo(new function(val1,val2) { alert(val2); }
第五種方法,寫一個類來存放參數。物件裏面的屬性就是參數值。舉例:
function FooArg() { //宣告物件
this.val1 = true; //宣告屬性
this.val2 = '';
}
function Foo(arg) {
arg.val1 = false;
arg.val2 = 'something';
}
arg = new FooArg();
Foo(arg);
alert(arg.val2);
也可以不用宣告直接用一個匿名類(用了jQuery之後常常見到)參數的方式。舉例:
function Foo(arg) {
arg.val1 = false;
arg.val2 = 'something';
}
arg = new function() {this.val1=true; this.val2='';};
Foo(arg);
alert(arg.val2);
實際應用上各有好處,端看你要怎麼用它。上面的例子沒有經過測試,不過大概就是那個樣子。


