<html> <head> <style> #div{ width:expression(document.body.clientWidth - 300); background-color:red; height:200px; } </style> <script> function leakMemory(){ var parentDiv = document.createElement("<div onclick='foo()'>"); parentDiv.bigString = new Array().join(new Array(2000).join("XXXXXX")); } </script> </head> <body > <input type="button" value="Leak Memory" onclick="leakMemory()"/> </body> </html>
分析:leakMemory()中创建了一个DOM对象parentDiv,然后该对象又持有了在leakMemory()中创建的一个大数组。
当leakMemory()函数退出时,DOM并不释放临时的parentDiv对象,所以JavaScript也不能释放LeakMemory闭包和那个创建的大数组。