2009-10-22 48 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