我使用以下脚本动态的加载脚本:
oScript = document.createElement("script");
oScript.language = "javascript";
oScript.type = "text/javascript";
oScript.id = "test";
oScript.defer = true;
oScript.text = "function aa() {alert(1);}";
document.appendChild(oScript);这时脚本可以加载,也就是函数aa可以调用,但是我执行了document.removeChild(oScript);以后用IE Develop Toolbar可以看到脚本DOM对象确实已经删除,但是函数aa依然可以调用,这是怎么回事?
oScript = document.createElement("script");
oScript.language = "javascript";
oScript.type = "text/javascript";
oScript.id = "test";
oScript.defer = true;
oScript.text = "function aa() {alert(1);}";
document.appendChild(oScript);这时脚本可以加载,也就是函数aa可以调用,但是我执行了document.removeChild(oScript);以后用IE Develop Toolbar可以看到脚本DOM对象确实已经删除,但是函数aa依然可以调用,这是怎么回事?
<html>
<HEAD>
<script type="text/javascript">
oScript = document.createElement("script");
oScript.language = "javascript";
oScript.type = "text/javascript";
oScript.id = "test";
oScript.defer = true;
oScript.text = "function aa() {alert(1);}";
document.getElementsByTagName("HEAD").item(0).appendChild(oScript);
function remove(){
oScript.text = "function aa() {}";
document.getElementsByTagName("HEAD").item(0).appendChild(oScript);
}
</script>
</HEAD>
<body>
<button onclick="javascript:remove();">remove</button>
<button onclick="javascript:aa();">alert1</button>
</body>
</html>
(function() {
var a = 1;
var b = 2;
alert(a + b);
})();a和b都是局部变量,代码执行完,资源就释放了。如果放到全局中,必然要留下内存垃圾var a = 1;
var b = 2;
alert(a + b);
<head>
<script type="text/javascript">
function append(){
var oScript = document.createElement("script");
oScript.type = "text/javascript";
oScript.id = "test";
oScript.defer = true;
oScript.text = "aa=function() {alert(1);}";
document.getElementsByTagName("head")[0].appendChild(oScript);
}
function remove(){
try {
document.getElementsByTagName("head")[0].removeChild(document.getElementById("test"));
}catch(e){
alert(e);
};
try {
delete aa;
}catch(e){
alert(e);
};
}
</script>
</head>
<body>
<button id="append" onClick="javascript:append();">加载</button>
<button id="remove" onClick="javascript:remove();">卸载</button>
<button id="run" onClick="javascript:try {aa()} catch (e){alert(e)};">alert1</button>
</body>
</html>