Блоки ES6 только предотвращают подъем функции? - PullRequest
3 голосов
/ 20 июня 2019

Кто-нибудь, пожалуйста, помогите мне понять следующий сценарий:

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

Другое обновление

Документация была неверной, и она была исправлена ​​экспертом, который предоставил выбранный ответ.

1 Ответ

4 голосов
/ 20 июня 2019

Я полагаю, что в приведенном выше случае явное замедление внутренней функции заменяет внешнюю функцию после выполнения блока.

Объявления функций, такие как var операторы, поднимаются наверх функции во время начального сканирования функции перед выполнением кода внутри нее.

Блоки не имеют отношения к подъему операторов var или объявлений функций (оба из которых имеют область действия функции). Они имеют значение только для let и const, которые имеют область видимости блока.

...