Javascript 参数传递方式
三种参数传递方式
1. 值传递
将参数的值完全复制一份,按值传递。特征:对于传递过来的变量进行修改,不会影响到原变量。
2. 引用传递
对于参数的完全引用传递。特征:无论是对于变量成员的修改,还是对变量重新赋值,都会影响到原对象。例如:
// C++
#include "stdio.h"
class People {
public:
int age;
People(int age): age(age) {}
};
void fun(People& p) {
p.age = 10;
People p2(20);
p = p2;
}
int main() {
People p(5);
fun(p);
printf("%d", p.age); // 20
return 0;
}
这里返回了20,说明 p = p2
改变了外部参数引用指向的地址,说明 C++ 是完全的引用传递。
3. 引用复制
将参数的地址复制一份,按值传递地址。特征:对于变量的成员进行修改时,会直接影响原变量;而如果对传递过来的变量进行重新赋值,则不会影响原变量,并且此后再修改变量的成员,也不会影响原变量。例如:
// javascript
function fun(p) {
p.age = 10;
p = { age: 20 };
}
let p = { age: 5 };
fun(p);
console.log(p.age); // 10
结论
所以 Javascript 的参数传递方式是
- 基本数据类型 -> 值传递
- 复杂数据类型 -> 引用复制 (也有书中写的是值传递,但含义相同)