Javascript变量和内存泄漏?

时间:2013-07-22 13:12:31

标签: javascript performance memory-management memory-leaks

在Javascript编码时是否可能创建内存泄漏?如果是这样,这取决于Javascript渲染引擎,例如V8或IE的Chakra

在迭代大型循环结构时,我的性能似乎非常慢。

我应该“删除”我不使用的变量吗?

var myVar = 'very very long string';
delete myVar;

1 个答案:

答案 0 :(得分:0)

在您已经显示的示例中,除非myVar在全局范围内,否则它将在函数末尾被垃圾收集。

通常,您不必担心JavaScript中的内存。当你无意中创建对象的引用并忘记它们时,你需要担心内存。例如:

function buttonClick() {
    var clicked = false;
    document.body.addEventListener('click', function(event) {
        if (clicked) return;
        if (event.target.nodeName !== 'button') return;
        clicked = foo();
    }, true);
}

上面的代码是错误的代码以开始(不清理事件监听器),但它说明了&#34;内存泄漏的例子&#34;在JavaScript中。调用buttonClick()时,它会将函数绑定到click上的<body>事件。因为永远不会调用removeEventListener来取消绑定侦听器,所以函数使用的内存永远不会被回收。这意味着每次调用buttonClick()时,一点点内存就会泄漏&#34;。

然而,即便如此,泄漏的内存量也很小,并且绝不会成为绝大多数用例的问题。可能存在问题的是服务器端JavaScript,其中代码可能更频繁地运行,并且该过程可以保持更长时间。