以下代碼將輸出「1」。然而,關鍵字「let」不應該使x成爲一個全局變量,從而使它對das()不可見?我們應該將變量的範圍限制在聲明的塊中,但在這裏,我看到一個內部函數可以訪問「let」變量,儘管x在其範圍之外被聲明。這怎麼可能?讓可變範圍
function letTest() {
\t function das() {
\t \t console.log(x);
// How does this function have access to a let variable declared outside its scope?
\t }
\t let x = 1;
\t das();
}
letTest();
我認爲這是因爲'das'是在'x'定義的塊中,就在2個塊的內部,但其中一個也包圍了'let',所以它很好 – Max
'x'沒有爲* global *以便它在嵌套函數中可見;它只需要在本地範圍或某個外部範圍內。 「let」聲明不會限制僅限於本地範圍的可見性;它是本地範圍和任何嵌套範圍。 – Pointy
換句話說,嵌套函數**內部的代碼是**包含'let'的塊的一部分。 – Pointy