简单数据类型和复杂数据类型传参

导读:之前对于这个传值和传地址的问题我自己也是很模糊的,今天看了专业导师的视频讲解关于两者的区别,有了新的认识和理解,以下是个人的理解和看法,写的不好还请谅解。
简单数据类型传的是数值,而复杂数据类型传的是地址,这句话大家可能都知道,但是实际考试的题目会怎么体现出来呢,一起来看看吧。

首先关于简单数据类型数值的传递

var num = 10;
var num = 20;
console.log(num);//结果为20

var num1 = 30;
function add(times) {
     times = times*10
     console.log(times);//结果300
}
add(num1);
console.log(num1);//结果30
上面的输出的num为什么是20呢,首先我们声明了一个变量会在内存里面开辟一块空间,这块空间在栈内存里面,而num = 10 表示这块空间放的是数值10,然后num指向这块空间;num = 20 则表示num指向的空间的值由10变为了20. 而num1的值为30是因为它只是把它的值复制了一份给了形参times,对于times值的改变不会影响num1,num1指向的栈空间里面的值还是30.

关于复杂数据类型数值的传递

function Person(name) {
    this.name = name;
}
function f1(x) {
    console.log(x.name);//张学友
    x.name = '黎明';
    console.log(x.name);//黎明
}
var p = new Person('张学友');
console.log(p.name);//结果张学友
f1(p);
console.log(p.name);//黎明

上面的p表示一个对象,它栈空间里面放的地址,在堆空间里面放的new Person和属性name,p本身指向的是栈空间里面的地址。说一下调用f1()后里面的两个结果,首先把它的地址给了形参x,即p和x是同地址,这个地址指向同一个堆空间。然后呢x.name就还是p的name属性的值 ‘张学友’,之后x.name=‘黎明’就是把name属性的值改变了,所以输出x.name就是 ‘黎明’,最后输出的p.name的值当然也为’黎明’。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值