2016-12-25 90 views
0

我讀in this article函數聲明只能出現在語句位置。我想知道這些「聲明職位」是什麼。在JavaScript中,「聲明職位」是什麼?

+4

有更多背景,你讀什麼? – David

+3

地方它是有效的把語句。比如'如果('的一個'if'聲明需求主體是一個聲明,而條件必須是一個表達式。但是,這其實不完全正確的。函數聲明不聲明和正式,並非在所有的語句位置有效,但大多數環境允許,但採用不同的評價規則TL;博士:。它的複雜 –

+0

@大衛這是一個博客的文章,我不知道如果我能在這裏分享的鏈接 – marco

回答

6

這些「聲明位置」是什麼。

的地方在它是有效的把聲明代碼。

句法結構被分成組,其中之一是陳述。另一大組是表達式。一般來說,您可以考慮表達式生成,而陳述描述了純粹稱爲「副作用」的內容。

例如,if語句的結構是

if (<expression>) <statement> 

一個if語句的條件需要是表達和主體需要是語句。 A 陳述可以從來沒有被置於表達式的位置,因爲它不產生一個值。

例如,由於一個if語句表達式中的加法運算符被定義爲

<expression> + <expression> 

,你不能這樣做

42 + if(...) {} 

要了解更多關於哪些語句和表達式是可用的,你可以看看specification,但它不一定是一個簡單的閱讀。 YDKJS - Grammar可能會更容易理解。


我讀的函數聲明只能在語句中的位置出現。

它實際上比這更復雜一點。 函數聲明不是語句,它們是聲明。官方聲明僅在全局範圍的頂層和函數聲明中有效。但是,大多數環境允許在其他地方使用函數聲明,但不幸的是以不同方式評估這些情況。

因此,ECMAScript 6添加了兼容性規則來解釋這種行爲,但它不是應該依賴的東西。另請參閱Why is a function declaration within a condition block hoisted to function scope in Chrome but not Firefox?

當文章說「函數聲明是一個聲明。「,那麼這肯定是一個簡化。

相關問題