按值傳遞和按引用傳遞

2021-09-26 14:42:10 字數 976 閱讀 8265

對於基本型別而言,是按值傳遞的

基本型別儲存在棧中

基本型別引數的傳遞和基本型別的複製一樣,傳遞的是值本身

var a =1;

function

test

(x)test

(a);

console.

log(a)

;// 1

按值傳遞的意思就是形參是實參的複製,形參實參互不干擾

so,雖然在函式test中a被修改,但是並沒有影響到函式外部a的值

那麼複雜型別呢?按值傳遞還是引用型別傳遞?

複雜型別儲存在記憶體堆中

引用型別引數的傳遞與引用型別的複製一樣,傳遞的是記憶體位址。

function

setname

(obj)

;// obj指向乙個新的位址,與person不再指向同乙個位址

console.

log(obj.name)

;// 'ppp'

}const person =

;setname

(person)

;console.

log(person.name)

;// 『***』

在引數傳遞中,形參obj和實參person指向同一記憶體位址,當改變形參的屬性name時,實參屬性也變了,這裡貌似是按引用傳遞的.

但是,如果直接改變形參本身,比如重新給形參分配一塊記憶體,那麼此時形參的改變就影響不到實參。所以複雜資料型別在傳遞時也並不是按照引用傳遞的。

這種傳遞就是傳說中的按共享傳遞

所以嚴格意義上來說,js中基本型別按值傳遞,物件型別按共享傳遞

Java按值傳遞和按引用傳遞

如果傳遞引數是基本型別或其包裝類,則按值傳遞,改變引數的值,實際引數的值不變。public static void main string args public static void changei integer i 如果傳遞引數是類或陣列,則按引用傳遞,改變物件的引用,實參的引用不會改變,但...

按值傳遞和引用傳遞

最近在看到函式按值傳遞還是引用傳遞的時候產生了困惑,突然想到這個問題好像從第一次看紅寶書就一直有這個困惑,於是各種搜,但是網上的種種回答也很不相同,想了兩天終於算是有個理由可以說服自己了。我們先不討論按值傳遞和引用傳遞的名字的定義,很多時候都是被名字的定義誤導了。實質重於形式,名字可以有很多,我們就...

JavaScript 按值傳遞 按引用傳遞

1 值的比較 引用的比較 首先,原始值的比較是值的比較 只有在它們值相等的時候它們才相等 比如簡單的 var a1 10 var a2 10 console.log a1 a2 true 其次,物件的比較並非值的比較 物件的比較均是引用的比較,當且僅當它們引用同乙個基物件時,它們才相等。即使兩個物件...