本文主要講述JS中函數(shù)傳參時值傳遞與引用傳遞的區(qū)別。
首先我們可以這樣理解:
“值傳遞”是指:在函數(shù)中傳遞的是一個數(shù)值;
“引用傳遞”是指: 在函數(shù)中傳遞的是一個對象。
可以看出二者本質(zhì)區(qū)別就是傳遞的數(shù)據(jù)類型不一樣,
“值傳遞”傳遞的是一個值;“引用傳遞”傳遞的是一個對象。
下面看下代碼:
1.值傳遞:
? var a = 1;? ? ? ? ?
function fn(a){
? ? ? ? ? a ++;
? ? ? ? ? return a;? ? ?
}
a = 1;
console.log(fn(a));? ? ? ? ? ? ? ?
console.log(a);
上面代碼分別輸出為2和1。
“值傳遞”在向參數(shù)傳遞值時,被傳遞的值會被復(fù)制給一個局部變量,
傳遞完后兩個變量互不相干。
2.引用傳遞:
var obj = {
? ? name:"abc",
}
function fn(obj){
? ? obj.name = "abc";? ? //指向函數(shù)外部創(chuàng)建的對象
? ? obj = new Object();? //創(chuàng)建一個全新的對象,指向的不是外部創(chuàng)建的對象
? ? obj.name = "123";? //為新創(chuàng)建的對象添加屬性
}
var obj = new Object();
fn(obj);
console.log(obj.name); //obj為外部創(chuàng)建的對象所以輸出值為“abc”
上面代碼輸出的值是“abc”。
說明請看上述代碼注釋,如有錯誤,敬請指正。