2 xiaogoudiandeng xiaogoudiandeng 于 2014.02.06 20:19 提问

请教关于JavaScript中的对象是按照值传递还是引用传递
function SetName(obj){ obj.name="Tom";//执行之前,此时的obj和Person的name属性均为undefined obj1=new Object(); obj1=obj;//声明一个全局对象,那么obj、obj1和Person此时应该是同一个对象 }//SetName函数执行完之后,obj对象销毁,其余对象仍然存在 Person=new Object();//声明Person对象 SetName(Person);//调用SetName函数并将对象作为参数传入 obj1.name="Lucy";//通过obj1改变Person的name属性 alert(Person.name);//输出“Lucy”,左边的代码结论给的感觉是,JavaScript的对象就是按引用传递

/*
我想知道在调用SetName(Person)的时候,Person传递到function SetName(obj)位置到底是值传递
还是引用传递,如果按照如下的说法-->摘抄至JavaScript高级教程(第三版)
function SetName(obj){
obj.name="Tom";
obj=new Object();
obj.name="Lucy";
}
Person=new Object();//声明Person对象
SetName(Person);//
alert(Person.name);//输出Tom
我感觉调用函数的时候Person和obj应该是用一个引用,但是是将function中的obj局部对象重新声明,我觉得在执行了obj=new Object()重新声明对象这个语句之后,
此时的obj和调用SetName(Person)的Person对象是不同的引用(地址), obj.name="Lucy";这句话对Person此时根本就没有起作用,所以才会有书中的结论,输出为“Tom"的结果,所以,我觉得书中的这个代码还是不足以证明JavaScript中对象是按值传递的这个结论,
我想请问如何去理解这个问题,谢谢大家*/

1个回答

u013270347
u013270347   2018.06.25 13:19

这个问题我这也有同感 感觉书的作者没讲清楚。但书中后面的那句才是重点,函数内部重写了obj时,变量引用的就是一个局部变量。而这个局部变量对象在函数执行完毕后就立即销毁了。但这能说明啥???只不过是解释了为啥obj.name不是Lucy仅此而已。。。。上网找了好多相关的知识,也是没懂说的是啥

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
JavaScript中函数参数是按值传递的还是按引用传递?
按值传递 VS 按引用传递 ·按值传递:是最常用的求值策略:函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参。 ·按引用传递:函数的形参接收实参的隐式引用,而不再是副本。这意味着函数形参的值如果被修改,实参也会被修改。同时两者指向相同的值。 JS的基本类型,是按值传递的。看下面的例子: 值传递 以上代码的弹出值分别为:10和20,下面进行一下分析: 声明变量a并赋值为
PHP中对象是按值传递还是按引用传递?
1.首先,什么是按值传递和按引用传递?按值传递就是仅仅把值传递过去,相当于传递的是值的拷贝,而按引用传递传递的是内存的地址。在 PHP5 中,如果按引用传递,就是将 zval 的地址赋给另一个变量,这时,两个变量都同时指向一个 zval 。而按值传递则是复制一个 zval,两个变量指向两个不同的 zval 。(为了简化,这里忽略 copy on write)按引用传递的特点:$a = 2; $b...
JAVA是引用传递还是值传递
一、定义(通俗理解) 引用传递:顾名思义就是一个变量赋给另一个变量的时候两个变量指向的是同一个对象; 值传递:一个变量赋给另一个变量另一个变量指向的是一个新的对象(也就是当前对象的复制) 那么java到底是值传递还是引用传递呢? 对于初学者或者说没有仔细思考过的同学来说这个概念即使知道了也没有很明确的答案!(ps:哈哈 至少我当初就是这样的 ,现在想想写下来和大家交流学习学习) 举2个例
Java到底是值传递?还是引用传递?
前言 最近和同事讨论算法效率问题无意中涉及到一个问题,java中调用方法的时候是值传递呢?还是引用传递?网上搜索一下相关问题,众说纷纭,有人说值传递,有人说引用传递,还有人说”基础类型是值传递,对象类型是引用传递“。那么我们就用简单客观的代码分析一下。 值传递 值传递是指将该值复制一份出来使用,比如a复制一份a1出来,a1做的操作不会影响到a。例子如下: public sta
JavaScript 函数参数传递到底是值传递还是引用传递 (精华)
转自:http://www.zhihu.com/question/27114726  (摘抄) 苏墨橘,想要成为生活家的前端程序员 :) 潘知呼、柴草的笑、高熙彤 等人赞同 之前第一次看到这部分的时候也有点云里雾里,今天看到题主问这个问题又仔细地看了一遍,查阅了相关资料,现在算是比较清楚了。 结合自己的理解整理了一下。 P.S. 如果觉得知乎上的阅读体验不
JS是按值传递还是按引用传递?
数据类型 在 javascript 中数据类型可以分为两类: 原始数据类型值 primitive type,比如Undefined,Null,Boolean,Number,String。引用类型值,也就是对象类型 Object type,比如Object,Array,Function,Date等。 声明变量时不同的内存分配 原始值:存储在栈(stack)中的简单数据段,也就是说
java到底是值传递还是引用传递
转子guhanjie博客:http://guhanjie.iteye.com/blog/1683637值传递例子 ... ... //定义了一个改变参数值的函数 public static void changeValue(int x) { x = x *2; } ... ... //调用该函数 int num
关于String是值传递还是引用传递?
Java中没有引用传递!!只有“值传递”,但这个值传递又不是绝对的值传递! 例如基本对象:基本对象是值传递。public class Test { public static void main(String[] args) { User user=new User("力量"); swap(user); System.out.println(user.getUserName());
对于Java的值传递和引用传递的区别
我知道有人会说,Java只有值传递而没有引用传递,但是如果把引用地址也看成一个值的话,是可以这么说的。 对于两个传递的定义是什么呢? 第一,值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。(一般发生在基本数据类型当中) 第二,引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。 所以对该副本进行操作时,会同时改变原对象。(发生在引
javascript中值传递,地址传递,引用传递的问题。
js中存在值传递和地址传递:JS中的基本类型按值传递,对象类型按地址传递,这句话也对,但是也不对,具体看你怎么去操作传过的参数对象了。push()方法有时候会出写奇妙的问题。