大家都知道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只是一個局部對象,當函數執行完的時候就會銷毀。
由於本人水平有限,不能舉出一些高端的例子望見諒
如果您覺得有不對,或不全,求更正求補充。