function aa(code){
var script = document.createElement("script");
script.text = code;
document.head.appendChild(script);
//或者在这里直接
//(或者直接document.head.appendChild( script ).parentNode.removeChild( script );)
}
aa('var a=8');
console.log(a);
document.getElementById('pap').onclick = function(){
document.head.getElementsByTagName('script')[0].parentNode.removeChild(document.head.getElementsByTagName('script')[0]);
console.log(a);
}
输出的a都是8.
javascript是怎么运行的,我添加之后立即删除怎么在script里面定义的变量还存在啊。我以为也会被删除也,有什么比较权威的说法吗?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
对于你代码里值得优化的地方我就不说了,不是重点。
那么就针对你的问题来说吧。
其实我可以把你的问题简化一下:
页面源码里有如下代码
问题是不是没变味?那接下来我解释一下
首先你要了解的是,对于页面上的所有脚本,运行了就是运行了,运行期间产生的东西,无论是指针还是对象,依照各自的生命周期,该保留保留,该销毁销毁。所有脚本按照顺序执行完毕后,该什么结果就是什么结果,删除
script标签是没有用的,因为你删除的只是一个标签而已,这个script标签里的代码已经加载到内存中了。那么
head里的这个script内的代码:var a = 1;,从某种角度来说等价于:window.a = 1;。从这句执行了之后,window下就已经有了a属性,并有值为:1。想要删除window.a也只能通过这种方式删除:delete window.a(严格模式不支持delete,相关请自行google)刚才忘了,
window下的属性不能通过delete删除那么,你是不是懂了呢?
希望可以帮到你
:P你这个是在对象运行函数
aa()之后删除javascript脚本的呀,当你click的时候,早就运行了,这个时候你删除的只是dom节点而已,执行过的函数后产生的变量自然存在。