为什么即使在用于创建它们的代码从DOM中删除之后,脚本仍可以正常运行?
我遇到了一种情况,我希望防止脚本损坏(@see my post)。
在我尝试提出解决方案时,我使用以下行编写了一个扩展名(只是为了看看会发生什么)。
$('script', doc).remove();
/*doc is passed here because this script is running as a firefox extension
outside of the document context.*/
我认为这会从DOM中删除所有脚本,因此没有脚本会在页面上运行,但事实并非如此。
我希望更多地了解这种行为背后的原因。
答案 0 :(得分:8)
脚本是DOM的一部分,当然,但是该脚本执行的结果留给了javascript引擎。删除脚本的源(DOM中的部分)不会删除引擎内存中的现有变量。
答案 1 :(得分:2)
Javascript不是DOM的一部分是正确的(反之亦然)。事实上,在最近的ACM Connections / Reflections会议上,我是一位受邀的演讲者,另一位是Javascript大师道格拉斯·克罗克福德,我们有一些有趣的聊天 - 我很惊讶地向他学习了那个致力于标准化DOM的委员会(在w3c)和那个致力于标准化Javascript(在ECMA中)没有重叠,没有协调,实际上几乎没有意识到彼此的存在和工作(但显然不比Crockford自己学习这个特殊事实更令人惊讶; - 。)