CNode

JavaScript引用变量作为函数参数的相关问题?

问答
BBIXIAOJIE发布于8 年前最后回复8 年前7 回复3652 浏览0 收藏

下面是代码

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中引用变量作为函数参数的时候,这个参数是以值传递的,还是以引用的方式传递的?

查看回复

回复 (7)

D
dewfall123#1·8 年前

image.png 图盗自知乎

我是否可以认为,函数内部的obj和函数外部的person指向了同一个内存地址。

obj 和 person这两个引用类型的值(堆地址)是同一个, 但是它们是两个引用 let a = 1; let b =1; 类似 a 和 b是两个number,值是相等的 ------> obj 和 person是两个引用,值是相等的。

“引用类型传递的是引用的值”,这个值指的是引用的具体的值,还是内存地址呢?

引用的值就是堆地址,也就是内存地址

B
BIXIAOJIE#5·8 年前

引用类型就是我们说的对象咯 自豪地采用 CNodeJS ionic

D
dewfall123#6·8 年前

值传递 引用类型传递的是引用的值。

function setName(obj) { obj = null; }

var person = new Object(); person.name = 'Bob'; setName(person); console.log(person);
如果是引用传递 person应该变成null

B
BIXIAOJIE#7·8 年前
引用 dewfall123值传递 引用类型传递的是引用的值。 function setName(obj) { obj = null; } var person = new Object(); person.name =...

@dewfall123 谢谢您 。如果在函数中只执行

obj.name = "bixiaojie";

可是外部的person的name属性也会随之改变。我是否可以认为,函数内部的obj和函数外部的person指向了同一个内存地址。

您说,"引用类型传递的是引用的值",这个值指的是引用的具体的值,还是内存地址呢?

原谅我有点刨根问底了,因为我想弄清楚每一个问题。 感谢您的回答。

参与回复
登录后即可参与回复。登录