2013-05-16 89 views
2

我有一個關於JavaScript隱藏或不可見變量的問題給我們。因爲它們不是在全局上下文中創建的。當我們編寫大型Web應用程序時,一些變量或函數不可行,但我們不知道它們的存在。他們吃我們的資源,如CPU,GPU。例如,我總是期望匿名函數中的所有變量在執行後都會被刪除(當然,如果沒有從上下文中引用它)。在這個例子中,我看不到interval變量無處不在,但它總是寫入控制檯interval id。JavaScript:檢測不可見變量

(function() {  
    var interval = setInterval(function(){ 
     console.log(interval.toLocaleString()); 
     // some heavy operation 
    }, 1000); 
})(); 

另一個例子是我在Backbone.js中創建了視圖,然後我意識到刪除視圖後,它也存在。 我的問題是,我怎樣才能找到或看到所有存在的變量,但在全局上下文中不可見?

+0

'interval'消耗計算機資源具有_nothing_做'的console.log()'工作。 –

+1

您的示例中的變量「interval」在調用匿名函數後無需保持活動狀態,因爲閉包(定時器處理函數)中沒有對它的引用。 – Pointy

+0

可能重複[用於調試JavaScript中的內存泄漏的工具](http://stackoverflow.com/questions/3573252/tools-for-debugging-memory-leaks-in-javascript) - 不確定你實際要求什麼;你可以在瀏覽器的JavaScript調試器中檢查這些變量 – Bergi

回答

-1

setInterval()實際上返回了「間隔」對象的intervalID。這是一個整數。

Mozilla's site

var intervalID = window.setInterval(func, delay[, param1, param2, ...]); 
var intervalID = window.setInterval(code, delay); 

清除數據(和停止的時間間隔)的唯一方法是使用.clearInterval

window.clearInterval(intervalID) 

那麼,發生了什麼事可能不是你在想什麼。該變量存在,但您的interval變量只是intervalID

0

看到這兩個網頁:

https://developers.google.com/chrome-developer-tools/docs/heap-profiling

https://developers.google.com/chrome-developer-tools/docs/heap-profiling-containment

從本質上講,你需要採取堆的快照並通過其內容導航找到上下文變量Chrome's developer tools

- 一個函數上下文中的變量,可以通過它在函數閉包中的名字進行訪問;

你能夠確定這堆元素是其顏色上下文/關閉變量(請參見在Chrome的開發工具底部的參考關鍵)。

enter image description here