实参
和形参
两种类型:实参:从字面意义咱们能够理解为“实际存在的参数”,是在函数调用时传给函数的变量,该变量在函数执行时必须存在。实参能够为变量、常量、函数、表达式等。
形参:从字面意义咱们能够理解为“形式上存在的参数”,由此咱们能够看出它并非真实存在的参数,又称为虚拟变量。它在函数定义时使用,做用为接收函数调用时的实参。
在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
复制代码
以上为我的看法,若有问题,欢迎斧正。复制代码