Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果对象的实例没有引用,会发生什么?_Javascript_Typescript_Object_Reference_Instance - Fatal编程技术网

Javascript 如果对象的实例没有引用,会发生什么?

Javascript 如果对象的实例没有引用,会发生什么?,javascript,typescript,object,reference,instance,Javascript,Typescript,Object,Reference,Instance,我想知道缺少任何引用的对象的实例是否会自动销毁/替换为新对象的实例 例如: let foo = new Object(); foo = "foo" 由new Object()创建的实例是否会被销毁,因为不再有对它的引用 内存中的实例会发生什么变化 当我们创建一个新的新对象()时,内存空间会被替换吗 由new Object()创建的实例是否会被销毁,因为不再有对它的引用 也许,最终。这些细节不是您可以在代码中直接观察到的,因此不在JavaScript规范中涵盖。垃圾收集(回收

我想知道缺少任何引用的对象的实例是否会自动销毁/替换为新对象的实例

例如:

let foo = new Object();
foo = "foo"
new Object()
创建的实例是否会被销毁,因为不再有对它的引用

内存中的实例会发生什么变化

当我们创建一个新的
新对象()
时,内存空间会被替换吗

new Object()
创建的实例是否会被销毁,因为不再有对它的引用

也许,最终。这些细节不是您可以在代码中直接观察到的,因此不在JavaScript规范中涵盖。垃圾收集(回收应用程序不再引用的内存)是JavaScript引擎的一个极其复杂的领域,编写和维护这些引擎的人员在努力使我们的代码尽可能快地运行的过程中不断地对其进行检查和改进

记忆中的实例发生了什么

就您的代码而言,只要您不再有对实例的引用,该实例就会消失。实际上,当/如果垃圾收集器决定它需要这样做时,实例用来占用的内存可能会在稍后的某个时间(可能更晚)被回收(供将来使用)

当我们创建一个新对象()时,内存空间会被替换吗

它根据JavaScript引擎(V8 vs.SpiderMonkey vs.JavaScriptCore等)以及内存是否充足而有所不同。但同样:就您的代码而言,当您不能再引用实例时,它就消失了


不要基于对垃圾收集工作方式的观察或假设来编写代码,这一点很重要,原因有几个,包括:不同的JavaScript引擎的代码不同;根据发动机的具体版本而有所不同;这取决于其他情况



我可能应该提到,JavaScript刚刚获得了一些新功能(它们将在ES2021规范中):这让您看起来可以在代码中观察垃圾收集。但是,这些功能经过精心设计,不会透露太多垃圾收集器正在做什么,以避免让人们根据看到的情况编写代码。

哦,该死,这很快就说到点子上了!谢谢:D PD:你能给我推荐一些书/文档来了解JS&TS的见解吗?致以最良好的祝愿@Frenzoid先生转到Crowder先生的个人资料页面。是的,他可以推荐一本书…