javascript传递参数 值传递 VS 引用传递

选手自我介绍:
值传递:
多针对于基本类型而言,即外部定义变量,传递给函数后,如果在函数内部对参数进行了改变,不会影响外部定义变量本身的值。

 

引用传递:多针对对象而言,即外部定义的对象,传递给函数后,如果在函数内部对对象进行了改变,就会影响外部定义的对象。

 

值传递 vs  引用传递开始

值传递示例

function addNum(num){
 num += 20;
 return num;
}

var testVar = 20;
var reTestVar = addNum(testVar);
alert(testVar);//20
alert(reTestVar);//40

 我们看到,传递的testVar在addNum函数内对参数加20,而testVar自身的值并没有改变。

 

引用传递示例

function changeObj(obj){
 obj.color ="red"; 
}

var flower = new Object();
flower.color = "blue";
changeObj(flower);
alert(flower.color);//red

 我们看到,传递的flower在changeObj函数内对对象设置了color属性,而外部flower自身color属性值也确实被改变了。

 

 

好了裁判宣布二者各领风骚,打成平手。

等等值传递有话要说:引用传递有问题!


先上证据:

function changeObj(obj){
 obj.color ="red"; 
 obj = new Object();
 obj.color = "yellow";
}

var flower = new Object();
flower.color = "blue";
changeObj(flower);
alert(flower.color);//red

 为什么alert(flower.color)是red而不是yellow?

 

稍等,专家席给出评论:
按照引用传递的说法,传递进去的flower对象的最终值被赋予了新对象,并且color属性值为yellow,而结果却是red,故引用传递在javascript中这个概念错误的。
为什么值会被变为red,因为obj和flower引用的是堆内存中的同一个对象,换句话说即使这个对象是按值传递的,obj也会按引用的内存地址对同一个对象进行修改,
故引用传递给出的例子说明不了什么。

 

宣布:值传递 vs 引用传递  ,值传递获胜。

自古成者王败者寇:javascript中只有值传递,没有引用传递。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值