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 的參數名稱一樣~