Кто-нибудь, пожалуйста, помогите мне понять следующий сценарий:
//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 предотвращает подъем объявления функции в верхнюю часть области.Функция ведет себя так, как если бы она была определена как выражение функции, и, таким образом, только неявное объявление переменной поднимается в верхнюю часть области действия
Другое обновление
Документация была неверной, и она была исправлена экспертом, который предоставил выбранный ответ.