JavaScript:按值传递的理解

JavaScript:按值传递的理解

  1. ECMAscript中所有的参数都是按值传递。不可能按引用传递。如果把整个对象作为参数传递,那么传递的值就是这个对象的引用。

  2. function setName(obj){
               obj.name = 'wcc';
               obj = new Object();//函数执行完毕后,就销毁掉了
               obj.name = 'hzm';
               //console.log(obj);//{name:hzm}
           }
           let testObj = {};
           setName(testObj);
    	   console.log(testObj);
    
    
    1. 理解思路
      1. 函数里的obj只是拷贝了一份testObj栈内存中的指针,
      2. 第一次操作obj.name时,操作的是指针指向testObj在堆内存存储的数据。
      3. 重新创建对象并赋值给obj的时候,obj的指针指向新的堆空间。
      4. 第二次操作obj.name时,操作的是新开辟的堆内存存储的数据。
  3. 如果是按引用传递会出现什么效果呢?

    1. 首先传参,传入不再是栈内存的指针,而是直接传入了指针指向的堆内存
    2. 当执行obj = new Object()时,会重写当前堆内存中的存储内容
    3. 函数执行完后,打印console.log(testObj),会返回{name:‘hzm’}
  4. 总结:

    1. 以上就是JavaScript按值传递的个人理解
    2. 如有误差,敬请评论区指正,谢谢!

目标,对一个人真的很重要!

cheers

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值