图解JS的传值与传址

//编程过程中经常会碰到传值,传址的问题!今天的主题就是关于传值、与传址。

//先讲讲赋值操作

//下例是原始类型赋值操作

var a=1,b=a,a=2;
console.log("a="+a+",b="+b);

 

//a先是被赋值为1,接着把a的值赋给b, 这时会进行值的拷贝,因此b=1;然后又把a赋值为2.

//在没有执行a=2之前,我们试试下列代码:

console.log(a===b);  //输出为true. 可见它们在内存中是指向同一个位置的。

//下例是引用类型赋值操作

var aTest1=['Dylan',"Tong","Xue"],aTest2=aTest1,aTest1=[1,2,3];
console.log('aTest1='+aTest1+",aTest2="+aTest2);

//引用类型赋值并不会真正重新拷贝引用值,而是拷贝引用的地址。注:图中原来的值用Old表示,重新赋过的值用New.

//aTest1与aTest2是引用同一个地址,至到aTest1被重新指向[1,2,3]才改变了aTest1的引用地址。

var aTest1=['Dylan',"Tong","Xue"],aTest2=aTest1;aTest1[1]=24;
console.log('aTest1='+aTest1+",aTest2="+aTest2);

//aTest1与aTest2是引用同一个地址,所以如果修改了aTest1[1], aTest2[1]的值也会被修改。

//那么关于函数的传值,道理相同。

//当参数为原始类型时,是直接拷贝其值,而为引用类型时是拷贝其引用的地址。

 1 var a=1,b=2;
 2 function f1(arg1,arg2){
 3     arg1=28,arg2=2;
 4     console.log(arg1+"  "+ arg2);
 5 }
 6 
 7 f1(a,b);
 8 console.log(a+" "+b);
 9 
10 var aTest1=[10,11,12],aTest2=['hello','world'];
11 console.log('aTest1='+aTest1+",aTest2="+aTest2);
12 function f2(arg1,arg2){
13     arg1[1]='dylan',arg2[1]='dylan';
14     console.log(arg1+"   "+arg2)
15 }
16 
17 f2(aTest1,aTest2);
18 console.log('aTest1='+aTest1+",aTest2="+aTest2);

转载于:https://www.cnblogs.com/idayln/p/3346242.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值