2009-10-22 50 views
0

我有一个比较大的(在内存使用和代码大小方面)JS函数(运行在IE/FF),我只偶尔使用(如,每天几次)。我想我可以通过将它的函数清零(使用“函数对象”的变量名称,因为它是)来完成它的工作。JavaScript函数加载

我很模糊,但我怎么会把它拿回来,假设也许一段时间后我想再做一次。我将如何从像'脚本'标签那样的URL加载JS?

这整个推理是否有意义?

+0

你有没有做过任何分析?你是否确定你的函数确实占用了大量的内存,或者你是否试图解决一个没有问题的问题? – 2009-10-23 05:08:34

回答

0

这是一点点哈克,但有两种方法:

使用DOM方法的脚本标记到页面插入到具有在它该功能的文件。您可能需要添加一个查询字符串,以便它认为它是一个新的JavaScript文件(如function.js?(随机数))

使用AJAX下载带有函数和eval()的文件;它

+0

对于所有事物的爱,不要“评估”它。如果脚本意外地出现了404并且返回一个带有JavaScript的错误页面呢?如果使用该路由,将会出现一些错误和令人讨厌的XSS漏洞... – 2009-10-22 23:58:55

0

要做到这一点的唯一真正的方法是将JavaScript脚本元素动态插入到文档中,并链接到包含您的函数的脚本文件,从而导致脚本被加载。一个警告:你必须确保文件名有附加时间作为查询字符串,否则缓存不友好的浏览器,如Internet Explorer将不会重新加载脚本。

0

与其他人一样,最好的办法是继续前进,并使用某种查询参数在页面中插入新的脚本标记以避免缓存问题。如果您使用JS库,这种技术实际上被称为“JSONP”;特别是jQuery有一个很好的方法来实现这个功能,这个方法可以让你轻松地附加回调函数等等。如果您编写自己的本地版本,则需要查看新脚本节点的readystate以了解它何时实际加载。

这就是说,我很好奇的一件事 - 如果我错了,请纠正我 - 为什么不使用“delete”关键字来杀死你的函数,而不是将它清零?喜欢的东西...

function myFunction() { return; } 

则...

delete myFunction; 

似乎是清洁的事情了更有效的方式,至少从我的角度。

+0

删除myFunction会使该功能保持不变。试图删除它返回false,意味着一个函数Object不能被这种方式删除。 – KooiInc 2009-10-23 07:07:16