ES6 是否引入了一种机制来制作块作用域的函数语句(不是表达式)?

Does ES6 introduce a mechanism to make block-scoped function statements (not expressions)?

ES6 是否引入了一种机制来制作块作用域的函数语句(不是表达式)?

以下在 ES5 中是非法的,我想在 ES6 中仍然如此?

!function() { 
  'use strict'; 
  { 
    function foo () { 
      console.log('foo!'); 
    }
  } 
  foo(); 
}();

编辑:更正了命名法。

您的代码在语法上 有效并且在 ES6 中"legal"

虽然它不会像 "expected" 那样工作:即使在 ES6 中,函数也受封闭函数的作用域(或者如果 运行 在全局作用域中则什么也没有)。

您可以使用具有 let 的块(真正的块!)范围可见性来声明它:

function bar() {
  {
    let foo = function() {};
    foo(); // foo is defined
  }

  foo(); // foo is not defined
}

bar();

Demo on babeljs.io