javascript中的其他内存是否可以覆盖变量指向的内存?

javascript中的其他内存是否可以覆盖变量指向的内存?,javascript,pointers,memory,Javascript,Pointers,Memory,假设我有一个指向那个内存的变量,我能把内存改成一个全新的内存吗,这样其他所有指向那个内存的变量现在都指向新内存了 var foo=函数(obj){ //我想将obj设置为新内存 obj={bar:'foo'} } var boo=功能(obj){ //可以将属性更改为新内存 obj.too={hoo:'doo'} } var zoo={too:{woo:'loo'}} //记忆不变 控制台日志(动物园) 富(动物园) 控制台日志(动物园) //记忆的改变 控制台日志(动物园) boo(动物园)

假设我有一个指向那个内存的变量,我能把内存改成一个全新的内存吗,这样其他所有指向那个内存的变量现在都指向新内存了

var foo=函数(obj){
//我想将obj设置为新内存
obj={bar:'foo'}
}
var boo=功能(obj){
//可以将属性更改为新内存
obj.too={hoo:'doo'}
}
var zoo={too:{woo:'loo'}}
//记忆不变
控制台日志(动物园)
富(动物园)
控制台日志(动物园)
//记忆的改变
控制台日志(动物园)
boo(动物园)
console.log(zoo)
简短的回答是“是”。当您拥有一个对象时,对该实例的任何/所有引用都将访问该实例的当前状态。但是,请理解,同一对象可以有多个实例,您对一个实例所做的操作可能不会影响其他实例

下面是一个更简单的示例:

var-zoo={
地点:“圣地亚哥”
};
函数getReference(){
//此函数的所有调用都将获得对同一实例的引用
返回动物园;
}
var o1=getReference();//返回对zoo实例的引用
var o2=getReference();//返回对zoo实例的第二个引用
console.log(o1.location,o2.location);//圣地亚哥,圣地亚哥
o2.location=“纽约”;
console.log(o1.location,o2.location);//纽约,纽约
//但是,对不同实例的引用不会影响其他实例
var o3=Object.create(zoo);
o3.location=“华盛顿特区”;
控制台日志(o1.location,o2.location,o3.location);纽约、纽约、华盛顿特区
简短的回答是“是”。当您拥有一个对象时,对该实例的任何/所有引用都将访问该实例的当前状态。但是,请理解,同一对象可以有多个实例,您对一个实例所做的操作可能不会影响其他实例

下面是一个更简单的示例:

var-zoo={
地点:“圣地亚哥”
};
函数getReference(){
//此函数的所有调用都将获得对同一实例的引用
返回动物园;
}
var o1=getReference();//返回对zoo实例的引用
var o2=getReference();//返回对zoo实例的第二个引用
console.log(o1.location,o2.location);//圣地亚哥,圣地亚哥
o2.location=“纽约”;
console.log(o1.location,o2.location);//纽约,纽约
//但是,对不同实例的引用不会影响其他实例
var o3=Object.create(zoo);
o3.location=“华盛顿特区”;

控制台日志(o1.location,o2.location,o3.location);纽约,纽约,华盛顿特区
由于javascript如何将参数传递给函数(请参阅),答案是否定的。不过,为了实现您的愿望,我会将变量重新分配给函数的返回值,即
zoo=foo(zoo)
(假设您更改
foo
以返回某些内容)。

由于javascript如何将参数传递给函数(请参阅),答案是否定的。不过,为了实现您的目标,我会将变量重新分配给函数的返回值,即
zoo=foo(zoo)(假设您更改
foo
以返回某些内容)。

内存方面确实没有保证(这是一个实现细节)。仅仅因为从引用中观察到一个新值并不意味着内存被覆盖(它也可能使用新内存空间并释放旧空间)。变量赋值是按值完成的(您为引用设置了一个新值)。这意味着您不能让一个变量指向另一个变量。因此,更改任何变量都不会导致更改任何其他变量


但是,可以使用任意数量的变量来保存对具有唯一键值对的唯一对象的引用。通过这种方式,变量可以访问同一对象,并且可以在保存该对象引用的任何变量中观察到对其任何属性的更改,因为每个属性对于每个对象都是唯一的。

内存方面确实没有保证(这是一个实现细节)。仅仅因为从引用中观察到一个新值并不意味着内存被覆盖(它也可能使用新内存空间并释放旧空间)。变量赋值是按值完成的(您为引用设置了一个新值)。这意味着您不能让一个变量指向另一个变量。因此,更改任何变量都不会导致更改任何其他变量


但是,可以使用任意数量的变量来保存对具有唯一键值对的唯一对象的引用。通过这种方式,变量可以访问同一对象,并且可以在保存该对象引用的任何变量中观察到对其任何属性的更改,因为每个属性对于每个对象都是唯一的。

您可以创建一个为您执行此操作的系统

memorySlot1=“一”
memorySlot2=“两个”
AssignSlot=函数(memorySlot){
返回(
{
插槽:memorySlot,
内容:(
函数(){
返回(
窗口[
记忆地段
]
)
}
)
}
)
}
ChangeSlotContent=函数(obj,newContent){
窗口[obj.Slot]=新内容
}
控制台日志(“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
var1=分配插槽(“内存插槽1”)
var2=分配插槽(“内存插槽2”)
var3=分配插槽(“内存插槽2”)
console.log(var1.Content()+“/”+var2.Content()+“/”+var3.Content())///one/two/two
控制台日志(“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
ChangeSlotContent(var2,“twoo-two”)
console.log(var1.Content()+“/”+var2.Content()+“/”+var3.Content())///one/twoo/twoo
控制台日志(“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
var1=分配插槽(“内存插槽2”)

console.log(var1.Content()

memorySlot1=“一”
memorySlot2=“两个”
AssignSlot=函数(memorySlot){
返回(