严格模式是不是禁止语句级函数声明?
Posted
技术标签:
【中文标题】严格模式是不是禁止语句级函数声明?【英文标题】:Does strict mode prohibit statement level function declarations?严格模式是否禁止语句级函数声明? 【发布时间】:2015-10-29 22:12:07 【问题描述】:"use strict";
if (true)
function foo()
在 phpStorm 中,此代码显示错误:
禁止不在程序或函数顶层的函数语句
但是,Chrome 很高兴地执行它,即使在调试器中并且没有任何控制台输出。
现在是禁止还是不禁止?
【问题讨论】:
不应该被允许。 Why Chrome still keep silent when using functions inside blocks in “strict mode”?的可能重复 【参考方案1】:是的,在 ES5 中它们是被禁止的(在严格模式下,所有实现都会抛出)。另请参阅Kangax' great article 了解草率模式下的函数语句。
然而,在 ES6 中,它们是具有新语义的块级函数声明。另见What are the precise semantics of block-level functions in ES6?。这似乎是 Chrome 在这里实现的; foo
在 if
块之外不可用。
【讨论】:
所以我的 Chrome 实现了最新的规范,而我的 PhpStorm 落后了?我的 JS 语言级别设置为JSX Harmony
。
@AndreKR:很有可能。我不熟悉 PhpStorm 或“JSX Harmony”,但鉴于 ES Harmony 是一个持续的过程,这似乎是可疑的 :-) 你还在使用 ES6 吗?
我没有使用它,但在调查此问题时我更改了语言级别。该错误也显示为语言级别设置为“ECMAScript 6”。以上是关于严格模式是不是禁止语句级函数声明?的主要内容,如果未能解决你的问题,请参考以下文章