<值傳遞參數概述>JavaScript中的參數傳遞方式有兩種:值傳遞和引用傳遞。值傳遞是指將實參的值復制到形參中,形參的改變對實參不會產生影響。引用傳遞是指將實參的地址傳遞到形參中,形參和實參指向同一個地址,形參改變會影響實參。
function Animal(name, age) { this.name = name; this.age = age; } function changeAnimal(animal) { animal.name = 'Tom'; animal.age = 2; } var cat = new Animal('Kitty', 1); console.log(cat); // {name: "Kitty", age: 1} changeAnimal(cat); console.log(cat); // {name: "Tom", age: 2}
上面的示例中,我們定義了一個Animal構造函數,用于創建一個動物對象,對象有姓名和年齡兩個屬性,然后我們定義了一個changeAnimal函數,用于修改動物對象信息。最后在控制臺上輸出結果,可以看到cat對象的姓名和年齡已經被修改。顯然,在changeAnimal函數中,我們傳入的是動物對象的引用,因此函數中的修改會影響到傳入的對象。
<對比值傳遞和引用傳遞>為了更好地理解值傳遞和引用傳遞之間的區別,我們再看一個通過值傳遞方式來傳遞對象的例子:
function changeAnimalValue(animal) { animal = { name: 'Tom', age: 2 }; } var cat = { name: 'Kitty', age: 1 }; console.log(cat); // {name: "Kitty", age: 1} changeAnimalValue(cat); console.log(cat); // {name: "Kitty", age: 1}
在上面的示例中,我們定義了一個changeAnimalValue函數,用于創建一個新的動物對象,并將引用修改為新對象的引用。我們認為這個過程中會修改cat對象,但事實并非如此。執行函數后,我們打印cat對象,發現cat對象沒有被修改,這是因為函數傳遞的是值,而不是引用。當我們將cat對象傳遞到函數中時,形參animal將形成一個新的變量,它只是將cat對象的復制放入其中。如果函數內對animal對象進行修改,不會影響到原始cat對象。 這樣,我們就理解了JavaScript對象值傳遞參數的相關知識,并通過舉例說明,幫助讀者更好地理解它。在日常開發中,我們應該根據具體情況來選擇何時使用值傳遞和何時使用引用傳遞。