ES6是否引入了一种机制来制作块范围的函数语句(而不是表达式)?
以下在ES5中是非法的,我认为在ES6中仍然如此?
!function() {
'use strict';
{
function foo () {
console.log('foo!');
}
}
foo();
}();
编辑:更正的命名法。
答案 0 :(得分:2)
您的代码在ES6中的语法 有效且“合法”。
它不会像预期的那样工作:即使在ES6中的函数也是由封闭函数限定的(如果在全局范围内运行,则没有任何内容)。
您可以使用块(实际块!)声明它 - 使用let
的范围可见性:
function bar() {
{
let foo = function() {};
foo(); // foo is defined
}
foo(); // foo is not defined
}
bar();