2016-12-25 88 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?

当文章说“函数声明是一个声明。“,那么这肯定是一个简化。

相关问题