【问题标题】:Does strict mode prohibit statement level function declarations?严格模式是否禁止语句级函数声明?
【发布时间】:2015-10-29 22:12:07
【问题描述】:
"use strict";

if (true) {
  function foo() {
  }
}

在 PhpStorm 中,此代码显示错误:

禁止不在程序或函数顶层的函数语句

但是,Chrome 很高兴地执行它,即使在调试器中并且没有任何控制台输出。

现在是禁止还是不禁止?

【问题讨论】:

标签: javascript strict


【解决方案1】:

是的,在 ES5 中它们是被禁止的(在严格模式下,所有实现都会抛出)。另请参阅Kangax' great article 了解草率模式下的函数语句。

然而,在 ES6 中,它们是具有新语义的块级函数声明。另见What are the precise semantics of block-level functions in ES6?。这似乎是 Chrome 在这里实现的; fooif 块之外不可用。

【讨论】:

  • 所以我的 Chrome 实现了最新的规范,而我的 PhpStorm 落后了?我的 JS 语言级别设置为JSX Harmony
  • @AndreKR:很有可能。我不熟悉 PhpStorm 或“JSX Harmony”,但鉴于 ES Harmony 是一个持续的过程,这似乎是可疑的 :-) 你还在使用 ES6 吗?
  • 我没有使用它,但在调查此问题时我更改了语言级别。该错误也显示为语言级别设置为“ECMAScript 6”。
猜你喜欢
  • 2013-10-24
  • 2017-08-27
  • 1970-01-01
  • 2016-01-26
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多