Блоки ES6 предотвращают только подъем функций?

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

//Outer funtion 
function foo() {
  console.info('outer foo');
}

{
  //Inner function
  function foo() {
    console.info('inner foo');
  }
}

foo(); //Says "inner foo"

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

Означает ли это, что блоки ES6 ТОЛЬКО предотвращают подъем функций при объявлении внутри?

Обновлять

Многие считают, что блоки не выполняют функции. Но, пожалуйста, посмотрите следующий сценарий согласно MDN:

foo('outside');  // TypeError: foo is not a function
{
  function foo(location) {
   console.info('foo is called ' + location);
  }
  foo('inside'); // works correctly and logs 'foo is called inside'
}

To be more precise, the block statement is preventing the function declaration from being hoisted to the top of the scope. The function is behaving as if it were defined as a function expression and, as such, it is only the implicit variable declaration that gets hoisted to the top of the scope

Еще одно обновление

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

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

Pointy 20.06.2019 18:24

«ближайшая объемлющая область функций», как в непосредственном охватывающем блоке?

Charlie 20.06.2019 18:25

Нет, не блокировать; функция. Простые блоки не имеют значения.

Pointy 20.06.2019 18:25

Хорошо, если это не внутри функции, оно поднимается наверх единицы кода (например, содержимое тега <script>).

Pointy 20.06.2019 18:28

Но, согласно MDN, функции, объявленные в блоках, не поднимаются. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

Charlie 20.06.2019 18:29

Эта страница неверна. MDN — это вики.

Pointy 20.06.2019 18:32

Что ж - Вот уж поистине не ожидалось! Спасибо.

Charlie 20.06.2019 18:33

MDN говорит: в нестрогом коде объявления функций внутри блоков ведут себя странно. Не используйте их. Я думаю, это какой-то баг. Или, если вы знаете ответ, почему функции ведут себя странно внутри блока, пожалуйста, прокомментируйте его. У меня такое же сомнение. Спасибо.

Aravind Emmadishetty 22.04.2021 07:41
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
8
230
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

I assume that in the above case the Inner function's explicit deceleration is replacing the hoisted outer function after the block is executed.

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

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

Но, согласно MDN, функции, объявленные в блоках, не поднимаются. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/

Charlie 20.06.2019 18:29

вау, ты быстрый :) я как раз собирался отметить это для технического обзора

Pointy 20.06.2019 18:35

Другие вопросы по теме