下面是代码
function setName(obj) {
obj.name = 'Harry';
obj = new Object();
obj.name = 'Lucy';
}
var person = new Object();
person.name = 'Bob';
setName(person);
console.log(person.name);
引用变量作为函数参数的时候,是值的复制还是引用的复制。在《JavaScript高级程序设计》第四章第一节中讲的知识点是。无论是引用类型还是基本类型,在函数的参数中都是按照值传递的?但是从我的角度来看,JavaScript中引用变量作为参数也是以引用的方式传递的。他们的内存地址也是相同的。
我的问题是,JavaScript中引用变量作为函数参数的时候,这个参数是以值传递的,还是以引用的方式传递的?
引用类型就是我们说的对象咯 自豪地采用 CNodeJS ionic
值传递 引用类型传递的是引用的值。
function setName(obj) { obj = null; }
var person = new Object();
person.name = ‘Bob’;
setName(person);
console.log(person);
如果是引用传递 person应该变成null
@dewfall123 谢谢您 。如果在函数中只执行
obj.name = “bixiaojie”;
可是外部的person的name属性也会随之改变。我是否可以认为,函数内部的obj和函数外部的person指向了同一个内存地址。
您说,“引用类型传递的是引用的值”,这个值指的是引用的具体的值,还是内存地址呢?
原谅我有点刨根问底了,因为我想弄清楚每一个问题。 感谢您的回答。
我是否可以认为,函数内部的obj和函数外部的person指向了同一个内存地址。
obj 和 person这两个引用类型的值(堆地址)是同一个, 但是它们是两个引用 let a = 1; let b =1; 类似 a 和 b是两个number,值是相等的 ------> obj 和 person是两个引用,值是相等的。
“引用类型传递的是引用的值”,这个值指的是引用的具体的值,还是内存地址呢?
引用的值就是堆地址,也就是内存地址
@dewfall123 正解,栈内存存简单值(含堆内存地址),堆内存存复杂值,被栈内存引用
来自酷炫的 CNodeMD
@dewfall123 谢谢您回复。很棒的答案。 From Noder