Does strict mode prohibit statement level function declarations?

人盡茶涼 提交于 2019-12-17 13:53:22

问题


"use strict";

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

In PhpStorm this code shows an error:

Function statement not at top level of a program or function is prohibited

However, Chrome happily executes it, even in the debugger and without any console output.

Now is it prohibited or not?


回答1:


Yes, in ES5 they are prohibited (and in strict mode, all implementations throw). See also Kangax' great article for function statements in sloppy mode.

However, in ES6 they are block-level function declarations with new semantics. See also What are the precise semantics of block-level functions in ES6?. This seems to be what Chrome implements here; foo is not available outside of the if block.



来源:https://stackoverflow.com/questions/31861239/does-strict-mode-prohibit-statement-level-function-declarations

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!