由於你沒有處理真正的頁面加載/卸載,我會建立一個模擬卸載事件的系統。
var myUnload = (function() {
var queue = [],
myUnload = function() {
queue.forEach(function (unloadFunc) {
undloadFunc();
});
queue = [];
};
myUnload.add = function (unloadFunc) {
queue.push(unloadFunc);
};
return myUnload;
}());
加載新的頁面應該只運行myUnload()
它加載新的頁面之前的代碼。
function loadPage(url) {
myUnload();
$('#page').load(url);
}
由一個頁面加載可撥打myUnload.add()
註冊一個清理函數的任何代碼,應該在加載新頁面時運行。
// some .js file that is loaded by a page
(function() {
var doSomething = function() {
// do something here
},
timer = setInterval(doSomething, 1000);
// register our cleanup callback with unload event system
myUnload.add(function() {
// since all of this code is isolated in an IIFE,
// clearing the timer will remove the last reference to
// doSomething and it will automatically be GCed
// This callback, the timer var and the enclosing IIFE
// will be GCed too when myUnload sets queue back to an empty array.
clearInterval(timer);
});
}());
無需代碼,我將根據建議更改和修改我的建議。 clearInterval聽起來不錯,我會去那。也感謝這個壓倒一切的技巧,我現在知道這就是js的工作原理。 – aron9forever
所有通用函數和變量在'window'中定義...所以,如果您有一個名爲'doSomething'的通用函數,您可以通過'window.doSomething'訪問它或者通過設置'window.doSomething = undef;' – Reflective