用 Javascript 编码时是否可能造成内存泄漏?如果是这样,这是否取决于 Javascript 渲染引擎,例如 V8 或 IE 的 Chakra
迭代大型循环结构时,我的性能似乎真的很慢。
我应该“删除”我不使用的变量吗?
var myVar = 'very very long string';
delete myVar;
用 Javascript 编码时是否可能造成内存泄漏?如果是这样,这是否取决于 Javascript 渲染引擎,例如 V8 或 IE 的 Chakra
迭代大型循环结构时,我的性能似乎真的很慢。
我应该“删除”我不使用的变量吗?
var myVar = 'very very long string';
delete myVar;
在您展示的示例中,除非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 中可能会出现问题,其中代码可能会更频繁地运行,并且进程保持活动的时间更长。