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