Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有可能销毁加载的JavaScript,包括函数&;局部变量?_Javascript_Ajax - Fatal编程技术网

是否有可能销毁加载的JavaScript,包括函数&;局部变量?

是否有可能销毁加载的JavaScript,包括函数&;局部变量?,javascript,ajax,Javascript,Ajax,我知道。可以将JavaScript和样式表文件动态加载到文档头中。另一方面,可以从文档头中删除脚本和样式表标记。然而,加载的JavaScript仍然存在于内存中 是否可以从web浏览器内存中销毁加载的JavaScript?我想。它应该类似于下面的伪代码 // Scan all variables in loaded JavaScript file. var loadedVariable = getLoadedVariable(JavaScriptFile); for(var variable

我知道。可以将JavaScript和样式表文件动态加载到文档头中。另一方面,可以从文档头中删除脚本和样式表标记。然而,加载的JavaScript仍然存在于内存中

是否可以从web浏览器内存中销毁加载的JavaScript?我想。它应该类似于下面的伪代码

// Scan all variables in loaded JavaScript file.
var loadedVariable = getLoadedVariable(JavaScriptFile);

for(var variable in loadedVariable)
{
    variable = null;
}

// Do same thing with function.
有没有可能创建一些JavaScript来完成这样的操作

谢谢,


现在,您可以使用和jQuery动态加载内容。

可以删除已加载的Javascript文件,但这不会撤消代码所做的操作,即代码中的函数仍在定义中

只需将函数定义替换为其他定义,即可将其删除:

myFunction = null;

这不会删除标识符,但它不再是一个函数。

可以删除已加载的Javascript文件,但这不会撤消代码所做的操作,即代码中的函数仍在定义中

只需将函数定义替换为其他定义,即可将其删除:

myFunction = null;

这不会删除标识符,但它不再是一个函数。

如果加载的脚本被分配给
窗口
属性,例如使用如下模块模式:

window.NiftyThing = (function() {
    function doSomething() { ... }
    return {
        doSomething: doSomething
    };
})();

然后可以删除引用它的属性:

delete window.NiftyThing;
…至少删除了对它的一个主要引用;如果有其他引用,则可能无法清理

如果使用了
var
关键字:

var NiftyThing = {
    doSomething: function() { ... }
};
…那么它不是一个属性,您不能使用
delete
,因此设置为
undefined
null
将中断引用:

NiftyThing = undefined;
您可以对冲您的赌注:

NiftyThing = undefined;
try { delete NiftyThing; } catch (e) { }
在所有情况下,由JavaScript实现来确定加载的脚本没有未完成的外部引用并进行清理,但至少您给了它机会


如Guffa所说,如果加载的脚本没有使用模块模式,那么您需要将这些规则应用于它的所有符号。这也是模块模式是件好事(tm)的另一个原因

如果加载的脚本被分配给
窗口
属性,例如,模块模式如下:

window.NiftyThing = (function() {
    function doSomething() { ... }
    return {
        doSomething: doSomething
    };
})();

然后可以删除引用它的属性:

delete window.NiftyThing;
…至少删除了对它的一个主要引用;如果有其他引用,则可能无法清理

如果使用了
var
关键字:

var NiftyThing = {
    doSomething: function() { ... }
};
…那么它不是一个属性,您不能使用
delete
,因此设置为
undefined
null
将中断引用:

NiftyThing = undefined;
您可以对冲您的赌注:

NiftyThing = undefined;
try { delete NiftyThing; } catch (e) { }
在所有情况下,由JavaScript实现来确定加载的脚本没有未完成的外部引用并进行清理,但至少您给了它机会


如Guffa所说,如果加载的脚本没有使用模块模式,那么您需要将这些规则应用于它的所有符号。这也是模块模式是件好事(tm)的另一个原因

为什么您认为需要这样做?因为我想创建一些没有任何iframe的web应用程序。每个页面都将通过Ajax加载。此外,JavaScript和样式表将根据页面需求加载。之后,引擎将销毁未使用的JavaScript和样式表,以减少函数、变量、JavaScript规则和样式表的重复名称。您认为为什么需要这样做?因为我想创建一些没有iframe的web应用程序。每个页面都将通过Ajax加载。此外,JavaScript和样式表将根据页面需求加载。之后,引擎将销毁未使用的JavaScript和样式表,以减少函数、变量、JavaScript规则和样式表的重复名称。我可以通过设置为未定义值来删除它吗?我可以通过设置为未定义值来删除它吗?因此,我需要使用正则表达式来查找每个可能的变量和函数模式。对吧?如果你在不知道你要卸载的是什么的情况下尝试这么做,我想你还有很多工作要做。你甚至不知道它会起作用;脚本可以设置事件处理程序,它将保留引用。你最终可能只是破坏它(事件处理程序试图通过你删除的符号调用函数),而不是删除它。因此,我需要使用正则表达式来查找变量和函数的每种可能模式。对吧?如果你在不知道你要卸载的是什么的情况下尝试这么做,我想你还有很多工作要做。你甚至不知道它会起作用;脚本可以设置事件处理程序,它将保留引用。您可能最终只是中断它(事件处理程序试图通过已删除的符号调用函数),而不是删除它。