2017-09-12 134 views
0
function foo(a) { 
    function a() { 
    return 8; 
    } 
    return a(); 
    y = 9; 
} 
console.log(foo() + " " + y); 

這給出了變量y的未定義錯誤。JavaScript中變量的範圍

function foo(a) { 
    y = 9; 

    function a() { 
    return 8; 
    } 
    return a(); 
} 
console.log(foo() + " " + y); 

打印在瀏覽器控制檯8 9

如果我們聲明沒有var關鍵字變量比它變成全局變量。

爲什麼第一個功能不遵循這個想法?

+0

請在Stack Overflow問一個問題之前做一些研究。通過_literally_複製粘貼這個問題的標題在谷歌,我發現鏈接的副本。 – Cerbrus

+0

@Cerbrus它無關變量的作用域和肯定不是一個重複。 – MrCode

+0

使用嚴格模式和第二片段會拋出異常也是如此。不要使用'var',只需在適當的範圍內使用'var'! – Bergi

回答

0

這是因爲在第一個例子,你y = 9之前有return結等的分配永遠達不到,留下不確定的。

+0

請不要回答這些明顯的重複。不要鼓勵或獎勵用戶做任何研究。 – Cerbrus

+0

@Cerbrus它不是一個重複。 – MrCode

+1

然後它是[this]的一個騙局(https://stackoverflow.com/questions/14102912/execute-statement-after-return-statement-in-javascript)。我的觀點是,OP在問之前應該真的做一些研究。 – Cerbrus