大家都知道JavaScript中有基本類型值和引用類型值,下面我將分享這兩個類型在變量的交互中的應用。實踐過的,出過問題的哦~~~~
1.賦值變量的值:
【1】基本類型值
var num = 5;
var num1 = num;
實際的工作方式是:將num復制一個副本5,然后賦給num1,雖然相等,但是兩個變量的值完全獨立。
驗證:
alert(num1);//5
alert(num+5);//10
【2】引用類型
當一個變量向另一個變量賦值引用類型時,同樣也會是復制一個副本給另一個變量,但這里是復制的是指針,而這個指針指向的是堆棧中的一個對象。
如果其中一個變量發生改變,另一個也會發生改變。請看:
var obj1 = new Object();
var obj2 = obj1;
obj1.name="XXX";
alert(obj2.name);//"XXX"
2.參數傳遞
【1】基本類型值按值傳遞,這個好說。
如果變量向函數的參數傳值時,被傳遞的值會復制給參數(ECMAScipt的arguments元素),
function addNum(num){
num = num+10;
return num;
}
var num = 10;
var result = addNum(num);
alert(num);//10沒有變化
alert(result);//20
【2】引用類型還是按值傳遞!!!!!
function setName(obj){
obj.name="XXX";
}
var man=new Object();
setName(obj);
alert(man.name);//"XXX"
到此千萬不要以為是引用傳遞,如果這么認為的話,那你還得看下面的代碼:
function setName(obj){
obj.name="XXX";
obj = new Object();
obj.name="wrong";
}
var man=new Object();
setName(man);
alert(man.name);//還是"XXX"
上面的例子證實了,如果是按照引用傳值的話,結果應該是“wrong”。
而實際上在函數內部重新聲明一個obj只是一個局部對象,當函數執行完的時候就會銷毀。
由於本人水平有限,不能舉出一些高端的例子望見諒
如果您覺得有不對,或不全,求更正求補充。