基本上我想加載JS文件中像這樣到頁面動態動態加載和刪除JS代碼從DOM和內存
globalVar = "some variable";
alert(globalVar);
然後我想刪除它,我可以很容易地從DOM刪除腳本,但我將有globalVar
留在記憶裏......
是否有一個JS庫,將幫助我加載腳本,然後卸載它和卸載所有的變量,類,通過該腳本被宣稱的功能呢?還是有一些技巧可以做到這一點?
基本上我想加載JS文件中像這樣到頁面動態動態加載和刪除JS代碼從DOM和內存
globalVar = "some variable";
alert(globalVar);
然後我想刪除它,我可以很容易地從DOM刪除腳本,但我將有globalVar
留在記憶裏......
是否有一個JS庫,將幫助我加載腳本,然後卸載它和卸載所有的變量,類,通過該腳本被宣稱的功能呢?還是有一些技巧可以做到這一點?
這是可怕的JavaScript。如果你要導入的JS對全局對象沒有任何幫助,那麼當你刪除它時(例如改變DOM),它就不應該爲全局對象編寫新變量。
希望你有超過進口JS控制,並應封裝代碼的自動執行功能,並保證所有的變量聲明開始var
。這意味着你不會用自己的變量來污染全局對象,並且可以在腳本中執行任何你需要的操作。上面的代碼將成爲:
function() {
var globalVar = "some variable";
alert(globalVar);
}();
這將確保沒有新的變量被寫入到全局對象,你仍然有機會獲得他們改變他們(這大概你需要做的)。
如果您想了解更多信息,您是否可以更多地瞭解重要劇本的實際效果?
在JavaScript中,當您聲明一個全局變量時,它實際上是「全局」對象(通常是DOMWindow或「窗口」)的一個屬性,因此您可以簡單地通過變量的名稱刪除全局引用。例如:
var foo = 123;
alert(foo); // Alerts "123"
alert(window.foo); // Alerts "123"
delete window.foo;
foo; // ReferenceError: foo is not defined.
所以,如果你可以跟蹤全局變量的使用(這應該是非常非常少,像一個),你可以刪除它從「窗口」屬性或「全球「根級對象。
更新
您可以擴展這個想法通常的工作方式如下。在腳本開始處,枚舉全局對象的屬性並將它們存儲在引用對象中。然後,當您想要標識新添加的全局變量時,請再次枚舉全局屬性,並僅存儲引用對象中不存在的屬性(這意味着它們是自上次檢查後新添加的)。然後簡單地刪除這些附加屬性。
好吧..正如我所說的..我動態加載JS,我只是不知道什麼variebles,分類,功能它將宣佈... – 2011-03-29 09:39:58
@Ai_boy:請參閱我的答案中新添加的段落。 – maerics 2011-03-29 09:45:03
是否有一個「準備好」的代碼或框架來做到這一點? 「我很懶,因爲哈斯克爾」:) :) – 2011-03-29 09:54:52
我認爲你在某種程度上是正確的..我會標記你的'解決方案'作爲現在的答案... – 2011-04-05 12:23:42
它可能是你寫的時候,但是在現代SPA中,異步模塊的加載和卸載是需要的。說你有多個網頁,你需要在特定元素上實例化一個jQuery插件。當您導航到新頁面時,上一頁的代碼和事件偵聽器仍然存在。 – r3wt 2015-01-07 08:56:43
感謝necro的帖子。你爲什麼要在SPA中卸載一個模塊,但又想保持模塊的效果? – EMMERICH 2015-01-13 08:00:45