【JavaScript】JS中两种数据类型的传参
- JavaScript的简单数据类型和复杂数据类型
- 01. 简单数据类型
- 简单数据类型的传参:
- 02. 复杂数据类型
- 复杂数据类型的传参:
JavaScript的简单数据类型和复杂数据类型
01. 简单数据类型
- 简单数据类型:也称为基本数据类型,值类型
- 值类型:这是因为变量存储的是值本身,因此叫做值类型
简单数据类型的传参:
var num = 10;
function fun(x){
x = 20;
}
fun(num);
num
在栈里面申请一个空间,并存放值 10;- 调用函数将
num
里面的值传给了形参x
;x
是一个未声明的变量,其在栈里面也申请了另一个空间,用来存放实参传进来的值,- 对
x
进行操作,并不会影响num
在栈空间里面的值
- 简单数据类型的值是存放在栈里面的
- 简单数据类型传参是将栈里面的值传给形参
02. 复杂数据类型
- 复杂数据类型:又被称为引用类型,通过
new
关键字创建的对象
复杂数据类型的传参:
function Person(name) {
this.name = name;
}
var p = new Person("A");
function func(v){
v.name = "B";
}
func(p);
- 变量 p 在栈里面的申请一个空间用于存放 地址 ,这个 地址 会指向 堆 里面的 Person(“A”)对象数据
- 调用函数,是将 p 指向的栈里面的地址,传给了形参 v,即 v 也申请了一个空间用于存放 地址
- 因为 p 和 v 的地址相同,所以他们指向的堆里面的数据实际上是同一个数据;
- 对 v 指向的数据进行操作,同样也会影响到 p 的数据,因为他们指向的是同一个数据
- 复杂数据类型是存放在 堆 里面的,在 栈 中存放的是变量的值:地址,而这个地址指向存放在 堆 里面的对象数据
- 复杂数据类型传参是将 地址 传给了形参,而形参和实参的地址指向的是同一个对象数据
【注意】Javascript
中是没有堆栈概念的,只是这种方式便于理解