希望这个基于jquery的简单代码能够帮助解释这个问题。
html:
<script>
$('#remover').click(function(){
$('#block').empty();
})
$('#test').click(function(){
alert(remove1); // still displays the varibale
})
</script>
<div id="block">
<script>
var remove1 = 'asasdsds';
var remove2 = 'asasdsds';
var remove3 = 'assdsdsdas';
var blabla = 'blablabl';
</script>
</div>
<span id="remover">Remove ALL</span>
<span id="test">Test</span> // it will still displays the variable.
我需要通过删除块内容来清除全局范围内的所有变量。块内容是动态的,可以包含任何javascript代码。
感谢阅读。
答案 0 :(得分:7)
这肯定不会像你期望的那样有效。 JavaScript堆没有耦合到DOM - 一旦脚本执行了,并且变异了堆,你就不能通过删除它们的相关源代码来“删除”它们。
全局变量通常在窗口对象上设置,因此如果您知道名称,则可以从那里删除它们。如果你想要撤消块内任何JavaScript的效果,那你几乎没有运气。
答案 1 :(得分:4)
Javascript无法正常工作!一旦解析了一个脚本块,从DOM中删除它就不会做任何事情......我唯一能想到的就是像这样的丑陋的黑客:
<script>
var blockKeys = [];
var oldKeys = {};
for (var i in window)
oldKeys[i] = true;
</script>
<div id="block">
<script>
var remove1 = 'asasdsds';
var remove2 = 'asasdsds';
var remove3 = 'assdsdsdas';
var blabla = 'blablabl';
</script>
</div>
<script>
for (var i in window)
{
if (!oldKeys[i])
blockKeys.push(i);
}
alert(remove1);
</script>
然后你的删除功能如下:
<script>
function remove()
{
for(var i = 0; i < blockKeys.length; i++)
eval(blockKeys[i] + ' = null');
}
</script>