这个Javascript会导致内存泄漏吗?
请注意,在下面的代码中,子对象获取对其父对象的引用。当对父对象的原始引用设置为null时会发生什么?由于仍然存在来自孩子的活动引用,家长是否会留在身边 Javascript这个Javascript会导致内存泄漏吗?,javascript,memory,Javascript,Memory,请注意,在下面的代码中,子对象获取对其父对象的引用。当对父对象的原始引用设置为null时会发生什么?由于仍然存在来自孩子的活动引用,家长是否会留在身边 Javascript var parent = function() { var self = this; self.runme = function() { document.getElementById('output').innerText = 'run me'; } self.child = new child(
var parent = function() {
var self = this;
self.runme = function() {
document.getElementById('output').innerText = 'run me';
}
self.child = new child(self);
return self;
}
var child = function(parent) {
var self = this;
var parent = parent;
self.event = function() {
parent.runme();
}
}
var p = new parent();
p.child.event();
p = null;
HTML
<div id="output">
old value
</div>
旧价值
小提琴
最终,父级和子级都将被垃圾收集,因为父级和子级都不再“可访问”。这里没有内存泄漏。假设您正在处理一个现代JavaScript解释器
最终,父级和子级都将被垃圾收集,因为父级和子级都不再“可访问”。这里没有内存泄漏。这是假设您正在处理一个现代JavaScript解释器。不应该这样做,因为大多数垃圾收集器都是基于JavaScript解释器的思想。基本上,如果无法从图的根访问对象,则可以安全地收集该对象。初始化后,创建如下图形:
root -> parent <-> child
因为父对象和它的从属对象都不可访问,所以它们都可以安全地收集。不应该这样,因为大多数垃圾收集器都基于。基本上,如果无法从图的根访问对象,则可以安全地收集该对象。初始化后,创建如下图形:
root -> parent <-> child
由于父项和其从属项都不可访问,因此可以安全地收集它们。您是否尝试过运行任何控制台性能日志记录,以查看内存负载情况?您是否遇到了导致您认为存在内存泄漏问题的特定问题?当对父级的原始引用设置为null时会发生什么情况GC会尽快清理它。不,我只是想知道,一般来说,上面的模式是否会导致泄漏。“由于仍然有来自子对象的活动引用,父对象是否会留在附近?”-是的。“这个Javascript会导致内存泄漏吗?”-不会。子脚本会被收集,父脚本也会被收集。您是否尝试运行任何控制台性能日志记录来查看内存负载情况?您是否遇到了导致您认为存在内存泄漏问题的特定问题?当对父级的原始引用设置为null时会发生什么情况GC会尽快清理它。不,我只是想知道,一般来说,上面的模式是否会导致泄漏。“由于仍然有来自子对象的活动引用,父对象是否会留在附近?”-是的。“这个Javascript会导致内存泄漏吗?”-不会。子脚本会被收集,父脚本也会被收集。
root X parent <-> child