實參
和形參
兩種類型:實參:從字面意義咱們能夠理解爲「實際存在的參數」,是在函數調用時傳給函數的變量,該變量在函數執行時必須存在。實參能夠爲變量、常量、函數、表達式等。
形參:從字面意義咱們能夠理解爲「形式上存在的參數」,由此咱們能夠看出它並非真實存在的參數,又稱爲虛擬變量。它在函數定義時使用,做用爲接收函數調用時的實參。
在JavaScript中實參
與形參
數量並不須要像JAVA同樣必須在數量上嚴格保持一致,具備很大的靈活性。以下:java
function test(str1, str2, str3) {
// ......
}
test(); // str1: undefined, str2: undefined, str3: undefined
test('hello'); // str1: 'hello', str2: undefined, str3: undefined
test('hello', 'world'); // str1: 'hello', str2: 'world', str3: undefined
test('hello', 'world', '!'); // str1: 'hello', str2: 'world', str3: '!'
複製代碼
在JavaScript代碼運行過程當中,形參
的做用爲接收實參
,它們兩個分別位於不一樣的內存地址中,大體能夠分爲兩種狀況:react
實參
爲原始值。當實參
爲原始值
時,此時形參
爲實參
的拷貝。所以,函數體內形參
值的改變並不會影響實參
。function test(str) {
str = 'chinese';
return str;
}
const str1 = 'china';
const str2 = test(str1);
console.log(str1); // china
console.log(str2); // chinese
複製代碼
實參
爲引用值。當實參
爲引用值
時,此時形參
爲實參
內存地址的拷貝。所以,函數體內形參
值的變化在必定狀況下將會影響實參
。function test(obj) {
// 形參obj的值實際上爲實參obj的內存引用,及形參與實參同時指向同一個內存地址。
obj.name = 'typeScript'; // 此時改變的爲形參與實參同時指向的那個內存地址中的值
// 因此此時也致使實參的name屬性發生了變化
obj = { // 此時對形參obj進行從新賦值,給予了它一個新的內存地址
name: 'react', // 今後以後的形參將於實參徹底解綁,二者以前再也不存在聯繫
star: 13000,
}
obj.star = 20000; // 因此這裏僅僅是改變了形參的star屬性
return obj;
}
const obj1 = {
name: 'javaScript',
star: 100000,
}
const obj2 = test(obj1);
console.log(obj1); // name: 'typeScript', star: 100000
console.log(obj2); // name: 'react', star: 20000
複製代碼
以上爲我的看法,若有問題,歡迎斧正。複製代碼