借助下面的例子,我們先來看一看什麼是值傳遞,什麼是引用傳遞:
let name = 'conardli';
function changevalue(name)
changevalue(name);
console.log(name);
執行上面的**,如果最終列印出來的name
是'conardli'
,沒有改變,說明函式引數傳遞的是變數的值,即值傳遞。如果最終列印的是'code****'
,函式內部的操作可以改變傳入的變數,那麼說明函式引數傳遞的是引用,即引用傳遞。
很明顯,上面的執行結果是'conardli'
,即函式引數僅僅是被傳入變數複製給了的乙個區域性變數,改變這個區域性變數不會對外部變數產生影響。
let obj = ;
function changevalue(obj)
changevalue(obj);
console.log(obj.name); // code****
上面的**可能讓你產生疑惑,是不是引數是引用型別就是引用傳遞呢?
首先明確一點,ecmascript
中所有的函式的引數都是按值傳遞的。
同樣的,當函式引數是引用型別時,我們同樣將引數複製了乙個副本到區域性變數,只不過複製的這個副本是指向堆記憶體中的位址而已,我們在函式內部對物件的屬性進行操作,實際上和外部變數指向堆記憶體中的值相同,但是這並不代表著引用傳遞,下面我們再按乙個例子:
let obj = {};
function changevalue(obj);
}changevalue(obj);
console.log(obj.name); // conardli
可見,函式引數傳遞的並不是變數的引用
,而是變數拷貝的副本,當變數是原始型別時,這個副本就是值本身,當變數是引用型別時,這個副本是指向堆記憶體的位址。所以,再次記住:
ecmascript
中所有的函式的引數都是按值傳遞的。
值傳遞和引用傳遞
幾乎每種語言都有值傳遞和引用傳遞.下面是我的一些曲解,只講現象,不涉及到任何的原理,主要是鬧著玩的.a 新交了個女朋友b.有一天他女朋友b看見a在吃冰激凌,b想吃,但是a是個 座有點小潔癖,不想讓b吃,於是給b買了個新的冰激凌說你吃這個吧,別碰我嘴裡這個.這就是值傳遞.a和b的值沒有任何關係,他們一...
值傳遞和引用傳遞
1.什麼是值傳遞和引用傳遞 值傳遞 方法呼叫時,實際引數的值copy乙份傳遞給形式引數,此時,有兩個相等的數值分別儲存於不同的記憶體位址上,因此,後面的方法中都是對形參位址上的數值進行修改。引用傳遞 方法呼叫時,實際引數的值 也就是位址 copy乙份傳遞給形式引數,此時,形參和實參的引用都指向同一儲...
值傳遞和引用傳遞
定義 通過建立乙個實際引數的副本,再傳遞給方法的形式引數,在main自身並不會被使用。這個在我們第一次使用編寫交換數的方法時,基本都會遇見,當我呼叫a,b兩個變數時,通過交換方法交換他們的位置,但是沒用,這就是值傳遞,乙個坑 public class switchnum switchnum a,b ...