剖析JavaScript傳值


大家都知道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只是一個局部對象,當函數執行完的時候就會銷毀。

 

 

  由於本人水平有限,不能舉出一些高端的例子望見諒

  如果您覺得有不對,或不全,求更正求補充。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM