js 函式中形參與實參的關係

=.=發表於2019-01-28

函式中形參與實參的關係

對於形參和實參的定義,在 權威指南中有著明確的定義。但是,我們更在意的是它們之間的關係,到底形參會不會影響到實參?

形參到底會不會影響到實參?

對於這個問題的答案,請先看以下兩個例子:

//例子一
function add(x){
    x+=1;
};

var a = 1;
add(a);

console.log(a); //1 看來不會影響到實參

//例子二
function Push(arr){
arr.push(1);
}

var b = [];
Push(b);
console.log(b); //[1] 額。。。好像會影響到實參

看完上面的例子,多多少少會有一些疑惑,到底它們之間是什麼關係?
筆者認為,形參和實參是存在一種引用關係的,就好比變數中的引用關係。我們都知道,變數中的引用關係跟它們的值有關。當值為原始型別時(string,number,boolean等等),var a=b是各自引用不同的記憶體地址的,修改不會影響到彼此;當值是物件,陣列等非原始型別時,它們引用的是同一個記憶體地址,修改則會相互影響。所以上面例子中,當實參是陣列時,由於它們共用同一記憶體地址,所以修改會影響彼此,這個在平時要多加註意!

筆者水平有限,上面僅是個人意見想法,如果有誤,請指出。 ?

相關文章