【问题标题】:In javascript, what are the "statement positions"? [closed]在javascript中,什么是“语句位置”? [关闭]
【发布时间】:2017-05-10 10:27:35
【问题描述】:

我读到in this article 函数声明只能出现在语句位置。我想知道这些“声明位置”是什么。

【问题讨论】:

  • 您阅读的内容是否有更多背景信息?
  • 放置语句有效的地方。例如。 if (<expression>) <statement>if 语句的主体需要是一个语句,而条件需要是一个表达式。然而,这实际上并不完全正确。函数声明不是语句,并且正式地,并非在所有语句位置都有效。然而,大多数环境允许它,但应用不同的评估规则。 tl;博士:这很复杂。
  • @David 这是一篇博文,不知道能不能在这里分享链接
  • 你可以引用上面那句话
  • @marco stackoverflow 最明确地允许您在帖子中添加 URL,因此只需点击编辑按钮,然后说“我在 http://...上阅读过该功能 [...]” .

标签: javascript


【解决方案1】:

这些“陈述立场”是什么。

在代码中放置语句有效的位置。

句法结构被分成几组,其中之一是语句。另一大组是表达式。一般来说,您可以将它们之间的区别视为表达式生成,而语句将做什么纯粹描述为“副作用”。

例如,if 语句的结构是

if (<expression>) <statement>

if 语句的条件需要是一个表达式,主体需要是一个语句语句不能永远代替表达式,因为它不会产生值。

例如,加法运算符定义为

<expression> + <expression>

由于if 语句不是表达式,你不能这样做

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?

当文章说“函数声明是一个语句。”时,那肯定是一种简化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 2021-09-09
    • 2023-03-17
    • 2010-11-06
    • 1970-01-01
    • 2014-11-25
    • 2015-03-26
    相关资源
    最近更新 更多