对于本例:
export class DummyClass{
constructor(container) {
const wrapper: HTMLElement = document.createElement("div");
wrapper.innerHTML = 'x';
container.append(wrapper);
}
}
new DummyClass(document.querySelector('body'));
创建DummyClass的新实例后,是否删除了“包装器”变量并释放了内存?
是的,它的发生是因为JS的工作方式:
当函数返回/结束其计算时,它的内存块将从调用堆栈中移除。
一个小例子:
var a;
function myF(){
// do stuff
}();
在函数调用之前,调用堆栈将如下所示:
-------
| A |
-------
那么当调用函数时:
-------
| myF |
-------
| A |
-------
当函数执行结束时:
-------
| A |
-------
调用堆栈中不会留下任何局部变量的跟踪。
你可以在这篇文章中找到更多的信息
const wrapper: HTMLElement = document.createElement("div");
由此创建的 然而,这并不是引用div的唯一内容。 您已经将div附加到body元素,因此body现在将有一个对它的引用,作为它的子元素之一。 如果这种情况持续下去,div将无法被清除(您也不希望它被清除,因为它对用户是可见的)。wrapper
变量就会被清除,这样就少了一种引用div的方式。