2014-09-04 96 views
4

當我打開Chrome(v35)DevTools並檢查一個對象時,控制檯可以顯示嵌套在函數中的東西,包括標記爲「功能範圍」的東西。使用Chrome DevTools控制檯以編程方式訪問功能範圍

例如,在看stackoverflow.com時,我可以看到有一個全局的$對象包含另一個名爲Callbacks的函數。 Callbacks,與$一樣,具有包含ClosureGlobal的功能範圍。

screenshot of Chrome DevTools console

  • 問題1:什麼是包含在其功能範圍內封閉函數內直接嵌套一些命名的對象和一些對象之間的區別?
  • 問題2:如何以編程方式引用控制檯中的函數作用域? window.$.Callbacks.???chrome.function???(window.$.Callbacks)

我問的原因是因爲我正在尋找內存泄漏,並希望根據對象類型和屬性名稱搜索函數閉包中的對象。

+0

是否將斷點設置爲選項? – 2014-09-04 18:32:45

+0

http://stackoverflow.com/questions/11969062/tool-to-track-down-javascript-memory-leak/12061206#12061206 – loislo 2014-09-05 03:33:23

+0

設置斷點和使用堆快照都要求我與DevTools GUI進行交互。我正在尋找以編程方式搜索DevTools中顯示的信息。對於我正在處理的應用程序,我想要手動篩選堆增量或通過堆棧進行點擊和展開的對象太多了。 – bdkosher 2014-09-05 12:06:07

回答

3

直接在一個函數內嵌套的某個命名對象與其函數範圍內的一個Closure內包含的某個對象之間有什麼區別?

直接與函數嵌套的對象是函數對象的屬性。例如,$.Callback具有.length屬性具有值1,它確實有一個.prototype屬性,但它從Function.prototype

在範圍的對象繼承(__proto__)是一個變量,它是從圍繞的範圍可訪問的功能。請參閱How do JavaScript closures work?

如何以編程方式引用控制檯中的函數作用域?

你不行。範圍不可編程訪問。我不認爲devtools有任何幫手來允許這個。另請參閱How do I search through scope variables in Google Chrome Developer Tools?

+0

有沒有辦法將Chrome的'console.dir'輸出樹(截圖+ OCR之外)導出爲文本文件? – bdkosher 2014-09-05 16:32:46

+0

我不知道。理論上你應該能夠分開開源調試器添加這樣的功能...... – Bergi 2014-09-06 10:38:33

相關問題