2008
08
01
01
21
如何寫一個swap function 來交換兩個整數變數
今天 K同事 問我要怎麼用Javascript
來寫一個swap function來交換兩個整數變數,
一開始想了一下,覺得應該不可行。
因為在javascript裡,
當整數變數時,
是會用copy by value的方式來傳遞參數,
這會導致你沒辦法去交換兩個變數值。
後來是想到先用 object 來傳遞整數,
如下:
function swap(a,b) {
var t;
t = a.i;
a.i = b.i;
b.i = t;
}
function INT(a) {
this.i = a;
}
var a = new INT(1);
var b = new INT(2);
swap(a,b);
後來 K同事 找到另外一種寫法,
function swap(that, x, y) {
var t;
t=that[x];
that[x]=that[y];
that[y]=t;
}
var a=1;
var b=2;
swap(this,"a","b");
這個寫法只適用在top level object,
必須要得到 this 。
看完這個程式碼,
就拿出大絕招 eval 。
程式如下:
function swap(x,y)
{
var t;
eval("t="+x);
eval(x+"="+y);
eval(y+"=t");
}
var a=1,b=2;
swap("a","b");
還是有個缺點,
你的變數名稱不能跟 swap 的參數名稱一樣~