严格模式是否禁止语句级函数声明?

时间:2015-08-06 16:37:30

标签: javascript strict

"use strict";

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

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

  

禁止在程序或功能的顶级功能声明

然而,Chrome很乐意执行它,即使在调试器中也没有任何控制台输出。

现在是否禁止?

1 个答案:

答案 0 :(得分:8)

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

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