我已经理解了pass by reference这个概念。
然而,copy of reference这个概念让我有点困惑。
这两个通过引用传递与引用的副本之间有什么区别吗?
var user={
name:"xxx"
}
function update(ref) {
ref = {
dep:"yyy"
};
}
update(user);当使用上述代码时,为什么不重新初始化user对象?
当我按以下方式更新现有属性时:
ref.name='modified'它更新user对象。
此外,如果我可以问,重构代码是否传递引用的副本?
发布于 2020-03-31 16:04:51
它与通过引用传递变量无关.
事实上,问题在于您已经在ref中放置了另一个对象,它不再指向存储在user变量中的同一个对象。
function update(ref) {
//In this line we are reinitializing the value of ref with another object
ref = {
dep: "yyy"
};
ref.name = 'modified';
}演示:
让我们看看这个片段的不同之处:
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函数中的参数:
至于如何将参数传递给函数(通过引用或值传递),原语和对象之间的区别是什么,您可以阅读其中的:
基元参数(例如数字)通过值传递给函数;该值被传递给函数,但是如果函数更改了参数的值,则此更改不会在全局或调用函数中得到反映。
如果将传递一个对象(即一个非原始值,例如数组或用户定义的对象)作为参数,并且该函数更改了该对象的属性,则该更改在函数.之外是可见的。
发布于 2020-03-31 03:35:37
如果变量ref是对某个对象obj的引用,那么ref中的值就是obj的内存地址。创建一个ref的副本,让我们称之为ref2,只会创建另一个变量,其中存储着相同的内存地址。因此,传递引用或引用的副本是相同的。
不一样的是通过价值传递和引用传递。这两者之间的区别在网上有很好的记录。
https://stackoverflow.com/questions/60942882
复制相似问题