以下是我在Google Chrome 19.0.1061.1(官方版本125213)开发的代码:
<html>
<title>Memory Leak</title>
<script type="text/javascript">
(function(){
this.window.setInterval(function() {
var xhr = new XMLHttpRequest();
xhr.open('GET', '', false);
xhr.send();
}, 50);
}).call(this);
</script>
</html>
Run Code Online (Sandbox Code Playgroud)
当我检查chrome://任务中的内存使用情况时,我可以看到"私有内存"无限增长(8GB RAM配置).如果我将上面的代码示例更改为:
<html>
<title>Memory Leak</title>
<script type="text/javascript">
(function(){
var xhr = new XMLHttpRequest();
var timeout = this.window.setInterval(function() {
xhr.open('GET', '', false);
xhr.send();
}, 50);
}).call(this);
</script>
</html>
Run Code Online (Sandbox Code Playgroud)
现在好了.
我不明白.为什么保持对setInterval函数的引用有助于为什么只定义一个xhr有助于自前一个声明处于闭包中?它只与v8有关吗?
我很感激你对它的见解.