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();
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();