0

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

迭代大型循环结构时,我的性能似乎真的很慢。

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

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

1 回答 1

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);
}

上面的代码一开始就是不好的代码(没有清理事件侦听器),但它说明了 JavaScript 中“内存泄漏”的示例。当buttonClick()被调用时,它将一个函数绑定click<body>. 因为removeEventListener永远不会调用解除绑定侦听器,所以函数使用的内存永远不会回收。这意味着每次buttonClick()调用时,都会有一点点内存“泄漏”。

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

于 2014-10-25T21:52:01.357 回答