函數中形參與實參的關系
對於形參和實參的定義,在 權威指南中有着明確的定義。但是,我們更在意的是它們之間的關系,到底形參會不會影響到實參?
形參到底會不會影響到實參?
對於這個問題的答案,請先看以下兩個例子:
//例子一
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
是各自引用不同的內存地址的,修改不會影響到彼此;當值是對象,數組等非原始類型時,它們引用的是同一個內存地址,修改則會相互影響。所以上面例子中,當實參是數組時,由於它們共用同一內存地址,所以修改會影響彼此,這個在平時要多加注意!
筆者水平有限,上面僅是個人意見想法,如果有誤,請指出。 😊