2013-03-01 112 views
5

嗨,我是Javascript新手,我正在閱讀Oreilly的Javascript權威指南。在聲明語句段,它說:函數聲明是否不能出現在條件語句中?

enter image description here

我做了一個簡單的測試:

var a = 1; 
while(a < 5){ 
    a++; 
    function double(a){return a * 2 }; 
    console.log(double(a)); 
}  

看來Node.js的不給我任何錯誤和運行預期。對此有何評論?

+2

以嚴格模式運行它,你會得到你的錯誤。這是無效的語法*(除非Mozilla的JS實現允許類似的語法)*,但歷史上已被實現許可。 – 2013-03-02 00:04:02

回答

-1

這是不正確的。但是,你應該記住,他們可能不像你所期望的那樣行事。

舉例來說,這將工作:

if(false) { 
    function double(a) {return a*2;}; 
} 
else { 
    console.log(double(4)); 
} 

即使你可能會認爲這是從來沒有定義功能,由於是一個if永遠達不到裏面的功能其實是在提升到的頂部當前的「塊」(無論是包含功能還是整個<script>標籤或文件),因此可以在任何地方訪問。

不應該function定義在if塊內,但沒有理由不能。

+1

有很多理由你不應該 - 1.規範說不要,2.在某些瀏覽器上,它不起作用! – Alnitak 2013-03-02 00:21:53

+0

@Alnitak我特別說你不應該。但根據吊裝規格,它與'var'完全相同。 – 2013-03-02 00:22:34

+0

根據規格無效,因此說明書中關於「提升」*(規範中未使用的術語)*描述的內容不適用。這些實現可能允許它,並且可能會將它的提升視爲相同,但它仍然無效。 – 2013-03-02 00:42:06

相關問題