如果我有以下JavaScript代码:
<script id="someJS">
var boom = 'boom';
function example(){
alert(boom);
}
</script>
然后执行:
$('#someJS').remove();
即使JavaScript函数不再位于DOM内,我仍然可以调用example()
...如何删除它?
我不想用boom = null; example = null;
取消实际的函数和变量,因为我并不总是知道JavaScript文件中的内容。例如函数名称,变量等。我需要能够删除该脚本标记内容的完整性。
更新:对于那些想要了解用户案例的人:
基本上在我正在处理的应用中,我们为某些客户添加了自定义JavaScript,当点击按钮时,例如保存,然后检查是否存在某些功能,然后运行它们。但是因为这个保存按钮是通用的,这意味着自定义代码在添加后会被调用,即使它不再相关。
我们提出的解决方案(有人发布了这个作为答案,但由于某种原因将其删除)就是将其命名为:
DynamicJS = {
boom: 'boom',
example: function(message) {
alert(message);
}
}
然后我们可以这样做:delete DyanmicJS
;
从全局范围中删除此命名空间中的所有函数和变量,有效地将脚本文件添加到内容中。
虽然我确信这不是一个完美的解决方案,就像你在文件中有事件监听器一样,我确信它们仍然存在!
答案 0 :(得分:36)
如何删除它?我不想废弃实际功能,因为我不总是知道JS文件中的内容。
你不能。脚本代码被执行,在JavaScript环境中创建,并且与加载它的script
元素完全断开连接。除了完全重新加载该环境外,如果您不知道代码的作用,则无法将其撤消。
即使您可以推断出代码所做的一些事情(例如,通过制作前后的全局变量列表),您可以删除检测到的新全局变量(或者至少将它们设置为null
或者undefined
,因为delete
无法通过函数声明或var
添加全局变量,因此不会告诉您哪些事件处理程序,Web工作者等等。代码可能已经连接起来。
答案 1 :(得分:16)
$('#someJS').remove();
仅从页面中删除脚本元素
删除元素时,脚本已经被解释,这意味着example
已被添加到全局范围。
要正确删除该功能,您可以执行此操作:
window.example = null;
但是,显然你不想这样做,如果其他地方的脚本实际上使用example
,这将导致大量错误。
另一种方法是为其分配一个空函数:
window.example = function(){};
这将阻止&#34;删除&#34;导致错误。
(除了可能预期的函数不返回值)
答案 2 :(得分:6)
一旦处理完该功能,它现在就成为window
可执行功能列表的一部分 - 无论您是否删除了原始来源。
要完全删除该功能,请尝试:
window['example'] = null;
但是,根据您的上次评论:
我不想忽略实际功能,因为我不总是知道JS文件中的内容。
听起来你想保持对函数的引用但不能直接执行它?如果是这种情况,您可以存储对它的引用并删除原始文件:
var _exampleBackup = window['example'];
window['example'] = null;
要调用它,您现在可以使用:
_exampleBackup();
要恢复它,如果你需要:
window['example'] = _exampleBackup;
example();
答案 3 :(得分:4)
该功能仍在窗口中。
您在脚本标记内放置的代码将在创建元素时运行,并且不再(大致)自身没有值。删除标记不会影响文档及其对文档的影响(通常)。
要删除函数,需要删除example
对象上的window
属性,这是函数的定义方式,运行上面的代码。
答案 4 :(得分:1)
$('#someJS').remove();
只是从DOM中删除text
,但对实际函数(也不是文件)没有任何作用,因为它被解析并执行。
要删除该功能,您可以将其设置为null
,或者只使用example=function(){};