怎么知道js? :d
const
现在 let obj = {}
let anotherObj = obj
包含anotherObj
值作为{}
的参考。
因此obj
仅提及anotherObj
。但是,当我们将新值重新分配给obj
时
为什么以这种方式在js中分配?
我知道这个功能提供了有用的monkeypatching技术
obj
变量 anotherObj // {}
obj = null
anotherObj // {}
仍包含anotherObj
值。
但是 {}
是anotherObj
上的引用,据我所知它应包含obj
null
答案 0 :(得分:1)
你误解了"引用"的方式。工作。你在C中pointers
喜欢这样思考。当你看到......时,
var obj = {};
var anotherObj = obj;
...您正在考虑obj
引用一个对象和引用一个对象的anotherObj
引用obj
。您正在考虑一系列参考文献。但是,除非您使用pointers
或其他地址空间引用,否则分配不适用于大多数语言。
相反,var obj = {};
会在某个内存位置创建一个对象,而obj
现在包含该内存位置。当您执行var anotherObj = obj;
时,obj
将被评估为该内存位置,并且该内存位置现在被指定为anotherObj
的值。现在,而不是anotherObj
指向obj
,我们同时将obj
和anotherObj
指向obj的相同内存位置。
因此,当我们执行obj = null
时,我们只会更改obj
指向的值 - anotherObj
仍然指向我们创建的对象的内存位置
据我所知,无法更新所有对象引用,甚至无法手动删除对象(例如,将其替换为null
,就像您尝试做的那样)。如果您的目的是为了管理对象生命周期而做类似的事情,那么您将会感到失望。相反,您需要采取其他方法,例如将对象存储在全局变量中,然后使用该全局引用而不是几个本地引用。