ilg*_*aar 0 javascript dom scope memory-management nodes
我习惯于在顶部块中声明范围中的每个变量以获得代码可读性.我怀疑函数范围内未添加到文档正文的节点会使空间混乱,并降低性能.他们会怎么样?一般而言,在函数范围内创建的变量会发生什么?执行功能后它们会被销毁吗?我是否需要担心释放内存?在一个范围的最顶层块声明变量是一个好习惯,还是只在需要时或在某些条件为真时才在现场声明变量?这有助于提高运行时性能吗?
假设这样的函数:
function myfunc() {
var someNode = document.createElement('div');
if(someCondition) { // add the node only if some condition is true
document.body.appendChild(someNode);
}
Run Code Online (Sandbox Code Playgroud)
VS这样的功能:
function myfunc() {
if(someCondition) { // create and add the node only if some condition is true
var someNode = document.createElement('div');
document.body.appendChild(someNode);
}
}
Run Code Online (Sandbox Code Playgroud)
Javascript使用垃圾收集实现自动内存管理.如果范围中没有引用数据的变量,则应回收内存.因此,在您的示例中,未使用的DIV将在函数退出时(或在下一次垃圾收集发生后不久)被销毁.
但是,最好避免制作一个不需要的对象.这需要时间,并在功能运行时耗尽内存.对于小的,简单的对象(即使用文字{...}语法创建的东西)和数组来说,这并不算太糟糕,但节点是非常复杂的对象.