通过删除javascript变量范围来清理它';来自DOM的s代码

通过删除javascript变量范围来清理它';来自DOM的s代码,javascript,jquery,dom,Javascript,Jquery,Dom,希望这个基于jquery的简单代码能够帮助解释这个问题 html: <script> $('#remover').click(function(){ $('#block').empty(); }) $('#test').click(function(){ alert(remove1); // still displays the varibale }) </script> <div id="block"> <scri

希望这个基于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.

$(“#删除程序”)。单击(函数(){
$(“#块”).empty();
})
$(“#测试”)。单击(函数(){
警报(remove1);//仍然显示变量
})
var remove1='asasdsds';
var remove2='asasdsds';
var remove3='assdsdas';
var blabla='blablabl';
全部删除
Test//它仍将显示变量。
我需要通过删除块内容来清除全局范围中的所有变量。块内容是动态的,可以包含任何javascript代码


谢谢您的阅读。

这肯定不会像您预期的那样起作用。JavaScript堆不与DOM耦合——一旦脚本执行并改变了堆,就不能通过删除其关联的源代码来“取消”它们


全局变量通常设置在窗口对象上,因此如果知道名称,可以从中删除它们。如果你想撤销块内任何JavaScript的效果,那你就太倒霉了。

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>

var区块键=[];
var oldKeys={};
用于(窗口中的变量i)
oldKeys[i]=真;
var remove1='asasdsds';
var remove2='asasdsds';
var remove3='assdsdas';
var blabla='blablabl';
用于(窗口中的变量i)
{
如果(!oldKeys[i])
区块键。按下(i);
}
警报(remove1);
然后,您的删除函数如下所示:

<script>
function remove()
{
    for(var i = 0; i < blockKeys.length; i++)
        eval(blockKeys[i] + ' = null');
}
</script>

函数删除()
{
对于(变量i=0;i
我知道了。那我就试试别的办法。谢谢你的信息!var声明将使用DontDelete属性向scope对象(即全局对象)添加属性——例如,一旦声明了属性,就不能删除它们(尽管可以将它们设置为null/undefined)