def namemethod():
return ''.join(random.choice(string.lowercase) for x in range(5))
class Test(object):
def __init__(self, name=None):
self.name = name if name is not None else namemethod()
MyClass的第一个实例是否会被自动收集?或者我是否需要在第二次分配之前明确let x = new MyClass();
...[more code]
let x = new MyClass();
或类似的东西,以避免内存泄漏?
答案 0 :(得分:2)
JavScript的内存会自动管理,因此garbage collector会收集被视为“无法访问”的对象。
在您提供的示例中,存储在x
中的对象将被垃圾收集,只要它无法从代码的其他部分访问(即,如果您将其放在{{{{}的全局范围内1}}行,不会收集对象,因为它仍然可以访问)。
大多数情况下,您不必担心JavaScript中的显式内存管理,但了解它确实很重要的常见情况非常重要(请参阅4 common leaks)。
作为一个实际的例子,在大多数前端框架/库中,重要的是销毁由应用程序的短期组件创建的...[more code]
(即,当倒计时时钟被删除时销毁倒计时时钟的间隔来自DOM)因为这些间隔中的闭包可以防止收集对象。