JavaScript 是一門很強大的編程語言,它允許我們傳遞參數來控制函數的行為。而在 JavaScript 中,有兩種通用的傳遞參數的方式,即值傳遞和引用傳遞。在這篇文章中,我們將主要探討 JavaScript 中的地址傳遞參數。
在 JavaScript 中,地址傳遞參數指的是將引用作為參數傳遞給函數的過程。在這個過程中,參數變量實際上是指向內存中的一個地址,該地址指向了一個對象或數組。因此,如果在函數內部修改了參數對象的屬性值,那么這個對象的原始值也會被修改。
例如,我們可以編寫一個函數,它接受一個對象作為參數,并在對象上設置一個新屬性:
function addProperty(obj) { obj.newProperty = 'new value'; }現在,我們可以創建一個對象,并將其傳遞給函數:
let myObj = { name: 'Tom' }; addProperty(myObj); console.log(myObj); // { name: 'Tom', newProperty: 'new value' }這里,我們可以看到函數成功地為傳遞的對象添加了一個新的屬性。這是因為函數接受了一個地址值,指向了傳遞的對象,進而被修改了。 但是,我們還要注意到,在 JavaScript 中,字符串、數字、布爾值、null 和 undefined 是原始類型,它們被傳遞到函數中時采用的是值傳遞。這意味著,如果我們對這些值進行修改,原始值不會發生變化。 例如,我們可以編寫一個函數,它接受一個字符串作為參數,并試圖修改它:
function changeStr(str) { str = 'new string'; }現在我們可以創建一個字符串,并將其傳遞給函數:
let myStr = 'old string'; changeStr(myStr); console.log(myStr); // 'old string'這里,我們可以看到函數沒有修改原始值。這是因為函數接受的是原始值的副本,并不是原始值本身,因此原始值不會發生變化。 需要注意的是,在 JavaScript 中,無論是值傳遞還是地址傳遞參數,都僅僅傳遞了內存地址的副本,而不是實際的內存對象本身。因此,函數內部對參數的修改不會影響原始對象本身。