请有人帮助我了解以下情况:
//Outer funtion
function foo() {
console.log('outer foo');
}
{
//Inner function
function foo() {
console.log('inner foo');
}
}
foo(); //Says "inner foo"
我假设在上述情况下,执行该块后,内部函数的显式减速度将替换提升的外部函数。
这是否意味着ES6块仅在内部声明时才阻止函数提升?
更新
许多人认为这些功能块不起作用。但是,请按照MDN查看以下情况-
foo('outside'); // TypeError: foo is not a function { function foo(location) { console.log('foo is called ' + location); } foo('inside'); // works correctly and logs 'foo is called inside' }
更准确地说,block语句阻止了该功能 声明从提升到范围的顶部。功能 表现得好像被定义为函数表达式,并且 这样,只有隐式变量声明被吊起 到范围的顶部
另一个更新
文档是错误的,只是由提供所选答案的专家修复的。
答案 0 :(得分:4)
我假设在上述情况下,执行该块后,内部函数的显式减速度将替换提升的外部函数。
函数声明,如var
语句,在执行函数中的代码之前,在对函数进行初始扫描期间被提升到函数的顶部。
块与var
语句或函数声明(两者均具有函数作用域)的提升无关。它们仅对具有块作用域的let
和const
至关重要。