2013-01-23 26 views
2

調試時,在匿名函數的情況下,我在哪裏可以找到閉包?如何在chrome調試器中查找匿名函數的閉包?

在非匿名函數的情況下,它似乎出現在「功能範圍」下。對於如:

function outer(x){ 
    var temp = 0; 
    return function inner(){ 
     alert(++x); 
    }; 
    } 
    var out = outer(3); 
    out(); 
    debugger; 
    out = outer(5); 
    out(); 

在這種情況下,我可以在「走出去」的監視表達式見closure_in_functionalscope

然而,當我使用匿名功能,如下圖所示:

function outer(x){ 
    var temp = 0; 
    return function(){ 
     alert(++x); 
    }; 
    } 
    outer(3)(); 
    debugger; 
    outer(5)(); 

在這種情況下,我沒有看到anonymous function在腕錶表達關閉。在匿名函數的情況下,哪個對象存儲了閉包?

回答

2

它與被命名或不被命名的內部函數無關。

在第一個屏幕截圖中,您正在檢查out變量,該變量引用返回的函數,但是outer。該函數在其關閉範圍內有x

在第二個屏幕截圖中,您正在檢查引用命名全局函數的outer變量。在該代碼片段中,您沒有任何變量來引用結果或outer(3)。如果您將其分配給變量,就像您在第一個示例var out = outer(3)中所做的那樣,並在該分配後放置了一個斷點,您將能夠看到out的閉合範圍。或者,您可以通過在調試器中添加「監視表達式」outer(3)來檢查該情況,而無需修改代碼。

+0

@epidemain,thx。這很有幫助 – pylearner