首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用传递与引用副本

引用传递与引用副本
EN

Stack Overflow用户
提问于 2020-03-31 03:13:49
回答 2查看 205关注 0票数 1

我已经理解了pass by reference这个概念。

然而,copy of reference这个概念让我有点困惑。

这两个通过引用传递与引用的副本之间有什么区别吗?

代码语言:javascript
复制
var user={
   name:"xxx"
}

function update(ref) {
  ref = {
     dep:"yyy"
  };
}

update(user);

当使用上述代码时,为什么不重新初始化user对象?

当我按以下方式更新现有属性时:

代码语言:javascript
复制
ref.name='modified'

它更新user对象。

此外,如果我可以问,重构代码是否传递引用的副本?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-31 16:04:51

它与通过引用传递变量无关.

事实上,问题在于您已经在ref中放置了另一个对象,它不再指向存储在user变量中的同一个对象。

代码语言:javascript
复制
function update(ref) {

  //In this line we are reinitializing the value of ref with another object
  ref = {
    dep: "yyy"
  };
  ref.name = 'modified';
}

演示:

让我们看看这个片段的不同之处:

代码语言:javascript
复制
var user = {
  name: "xxx"
}

function update(ref) {
  //Here we are updating ref/user 
  ref.before = "a value";
  
  //And in this line we are reinitializing the value of ref with another object
  ref = {
    dep: "yyy"
  };
  ref.name = 'modified';
  console.log('This is ref value: ');
  console.log(ref);
}
update(user);
console.log('This is user value: ');
console.log(user);

JS函数中的参数:

至于如何将参数传递给函数(通过引用或值传递),原语和对象之间的区别是什么,您可以阅读其中的:

基元参数(例如数字)通过值传递给函数;该值被传递给函数,但是如果函数更改了参数的值,则此更改不会在全局或调用函数中得到反映。

如果将传递一个对象(即一个非原始值,例如数组或用户定义的对象)作为参数,并且该函数更改了该对象的属性,则该更改在函数.之外是可见的。

票数 0
EN

Stack Overflow用户

发布于 2020-03-31 03:35:37

如果变量ref是对某个对象obj的引用,那么ref中的值就是obj的内存地址。创建一个ref的副本,让我们称之为ref2,只会创建另一个变量,其中存储着相同的内存地址。因此,传递引用或引用的副本是相同的。

不一样的是通过价值传递和引用传递。这两者之间的区别在网上有很好的记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60942882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档