2014-02-15 36 views
2

考慮以下代碼:的Javascript關閉行爲是在運行時奇怪

function f1(p) { 
    function f2() { 
     console.log(p); //Output: 10 
    } 
    f2(); 
} 

f1(10); 

這段代碼的輸出是10,但如果我更改如下代碼:

function f1(p) { 
    function f2() { 
     debugger; 
    } 
    f2(); 
} 

f1(10); 

雖然我調試的代碼在控制檯中,如果我嘗試讀p,我得到:

ReferenceError: p is not defined 

爲什麼會發生這種情況?

+0

我不想讓它工作。當控制檯在調試器線停止時,如果您嘗試在控制檯中讀取p,則會出現參考錯誤。 –

回答

1

pf2訪問,但因爲你不使用p,似乎p被解釋/編譯器性能問題後f1聲明取出並解析完成。

+0

@MohammadZargarani如果一個編輯僅僅是爲了糾正一個打字錯誤,那麼不要建議您用別名替換一些其他詞(例如不要),而是留下評論。 – Sumurai8

+0

@ Sumurai8謝謝你的關注,但我不認爲糾正別人關心你!有一個美好的一天:) –

+0

@MohammadZargarani因爲你提出了一個編輯,我在審查隊列中遇到它,我覺得我需要解釋這一點。無論如何,這些編輯通常會被拒絕爲「太小」。 – Sumurai8

1

我懷疑主機沒有把所有可能的變量放在關閉中,因爲你可能試圖在調試器中訪問它們。相反,如果p未在內部函數中訪問,則它不會進入閉包並且無法訪問。