码迷,mamicode.com
首页 > Web开发 > 详细

关于js对象值的传递

时间:2016-04-09 18:37:18      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

   结合红宝书和网上的一些文章,记录下自己对关于js对象的值的传递的一些理解。

   js对象是保存在堆内存中的,当把对象赋值给变量时,是把对象在堆内存的引用(地址)赋值给了变量,变量通过地址来访问对象。下面来看两个例子,一个是自己想的,一个是红包书上的。

   第一个是自己的例子:

1 var a = [1,3];var b = a; b= [3,4];  //先将对象[1,3]的地址赋值给了a,a又将自己的地址副本赋值给了b,a和b引用的是同一个对象[1,3]。然后又将[3,4]的地址赋值给了b
2 [3, 4]                  //但a的地址并未改变,引用的还是对象[1,3]的地址,所以a的值也不会变化
3 a
4 [1, 3]
5 var a = [1,3];var b = a; b.push(4); //但如果不是赋值,而是操作,如向数组[1,3]推入一个元素4,由于此时a和b的地址相同,引用的是同一个对象,b通过引用(地址)操作
6 3                     //堆内存中的对象数组[1,3],向其推入新的元素4,导致对象发生了变化,那么此时a的值也会发生变化,和b一样。
7 a
8 [1, 3, 4]

 

  然后这个是红宝书的例子,说的是在给函数传参数的时候,对象也是按值传递的(对象按引用传递,我现在理解为是按引用的值即地址传递来理解,不知道对不对)。

 


1 function setName(obj) { //person对象把自己的地址引用传递给了函数setName的局部变量obj
2
obj.name = "bob";    //局部变量obj通过地址引用操作person对象,给它添加了一个name属性,并赋值bob
3 obj = new Object();  //又将一个新对象的引用地址赋值给了obj局部变量,obj局部变量与person对象的关系切断了 4 obj.name = "nick"; //obj局部变量对新对象进行操作,添加了name属性,并赋值为nick,全局变量person的值并未发生改变,然后函数运行结束,局部变量也被销毁 5 } 6 7 var person = new Object(); 8 setName(person); 9 alert(person.name); // "bob"

  以上就是我对js对象值传递的理解,如有不对之处,欢迎指正。第一次写这么长,文字还是很少,也不知道自己是否表达的很清楚。

 

关于js对象值的传递

标签:

原文地址:http://www.cnblogs.com/happysiva/p/5372084.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!