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

And*_*eKR 9 javascript strict

"use strict";

if (true) {
  function foo() {
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

现在禁止或不禁止?

Ber*_*rgi 9

是的,在ES5中它们是被禁止的(并且在严格模式下,所有实现都抛出).另请参阅Kangax关于草率模式中函数语句的精彩文章.

但是,在ES6中,它们是具有新语义的块级函数声明.另请参见ES6中块级函数的精确语义是什么?.这似乎是Chrome在这里实现的; fooif街区之外不可用.