我读到的这个职位几乎澄清了有关作用域的所有内容,只留下了这样的疑问:
如果词法作用域在每次运行时生成一个新环境并存储它们的信息,那么在代码频繁运行的环境中,您需要在作用域的末尾声明var_of_scope = null
以释放内存,如果没有引用环境的元素,则JavaScript会自动识别这一点?
发布于 2022-01-06 06:07:48
不,那几乎是不必要的。
Javascript使用垃圾收集。当任何作用域中没有值引用存储在内存中的值时,它将在下一次垃圾回收器运行期间被移除。
在你所描述的情况下:
function foo() {
let data = "some data here"
// do stuff with data
data = null
}
在这里设置null
是没有帮助的。它确实删除了data
的前一个值的所有引用,但是由于作用域将在函数结束时结束,所以所有局部变量都会随之被丢弃。
实际上,这将阻止您使用const
关键字,这是非常好的使用。默认情况下,所有变量都应该是const
,只有在初始化后确实需要分配变量时,才应该将它们更改为let
。
这样做更好:
function foo() {
const data = "some data here"
// do stuff with data
}
一般来说,你不用担心这件事。在javascript中泄漏内存是不容易的,就像在C. 这是有可能的这样的语言中那样,但是只要您遵循下面的大多数最佳实践,您可能会很好。
https://stackoverflow.com/questions/70603083
复制相似问题