JS 的引用賦值與傳值賦值


 

這個問題說大不大說小不小,如果你有幸踩了這個坑,一定會找這篇文章,哈哈~

 
         

現說一下JS數字的類型:基本類型引用類型

 
         

先看下下面兩個栗子:

var a = 30;
var b = a;
a = 20;
console.log( b )   // 30
 
var a = [1,2];
var b = a;
a[0] = 5;
console.log( b )  // [5,2]

簡單的說:

 
         

number,string類型都是基本類型,而基本類型存放在棧區,訪問時按值訪問,賦值是按照普通方式賦值;

 
         

對象和數組是通過引用來賦值的,所以改變a的同時b也會跟着改變。

 

阿里2014年的筆試題: 

var a = 1;

var obj = {
    b: 2
};
var fn = function () {};
fn.c = 3;
 
function test(x, y, z) {
    x = 4;
    y.b = 5;
    z.c = 6;
    return z;
}
test(a, obj, fn);
alert(a + obj.b + fn.c);
 
 
 

答案:12

 首先test傳遞進去的實參中,a是基本類型(,復制了一份值),obj是object(指向地址,你動我也動),fn也當然不是基本類型啦。在執行test的時候,x被賦值為4(跟a沒關系,各玩各的,a仍然為1),y的b被賦值為5,那obj的b也變為5,z的c變為6,那fn的c當然也會是6. 所以alert的結果應該是1+5+6 =12. (其實test不返回z也一樣,z仍然改變的)。

 附上原文地址:https://www.cnblogs.com/cench/p/6019453.html

 


免責聲明!

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



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