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

时间:2015-04-07 20:28:42

标签: javascript ecmascript-6

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

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

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

编辑:更正的命名法。

1 个答案:

答案 0 :(得分:2)

您的代码在ES6中的语法 有效且“合法”。

它不会像预期的那样工作:即使在ES6中的函数也是由封闭函数限定的(如果在全局范围内运行,则没有任何内容)。

您可以使用块(实际块!)声明它 - 使用let的范围可见性:

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

  foo(); // foo is not defined
}

bar();

Demo on babeljs.io