js中对象当做参数传递是否改变自身

先套用js高程一句话——ECMAScript 中所有函数的参数都是按值传递

 

 

什么叫做按值传递???

可以简单理解为生成一个新的变量和需要传递的参数的值一样,就像把值从一个变量复制到另一个变量一样。

var a  = 1;
function num(o){
    o = 2;
   return o;
}
obj(a);
console.log(a);//1

   看上面的代码把a(值为1)当做变量运行函数num,函数内更改变量的值为2,但其实更改的不是a,而是按值传递生成的新的变量,所以a并不会产生改变。

 

那么再看当一个对象传递进去的情况呢??

var a  = {b:1};
function obj(o){
    o.b = 2;
   return o;
}
obj(a);
console.log(a);//{b:2}

WTF!!!!!!!!!  为什么它变了,不应该按值传递本身不发生改变吗????/

这里我们就需要理解对象在js中的引用与赋值了,我们一开始定义a={b:1},这里把他拆分为两部分可以,首先创建一个对象{b:1}并保存在内存堆里面,然后我们可以知道对象{b:1}在内存中的地址(假设为000000),那么我就把这个地址000000给a。这样a就指向这个对象{b:1}咯。

理解了对象的引用方式再来看上面的代码,再来理解此处的按值传递。这里并不是生成一个新的{b:1}当做参数,而是生成一个新的引用地址(假设111111),它和原先的引用地址(000000)同时指向这个对象。所以不管在哪里更改这个对象的属性,最终都导致最终的结果变了    为{b:2}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值