Единственное отличие состоит в том, что вместо написания «function funcName () {что угодно;} funcName ();» вы пишете "(function () {что угодно;}) ();" который избегает оставлять funcName валяться. Это крошечная вещь, но в большом проекте с большим количеством одноразовых функций это может защитить вас от случайного повторного использования имени функции.

оке Udacity о выражениях функций, вызываемых немедленно (относительно предоставленного фрагмента кода), говорится:

Возвращаемая функция закрывает (т.е. захватывает) переменную hi. Это позволяет myFunction поддерживать закрытое, изменяемое состояние, к которому нет доступа вне функции! Что ещетак как выраженная функция вызывается немедленно, IIFE красиво оборачивает код, чтобы мы не загрязняли глобальную область видимости.

Я изо всех сил пытаюсь понять, что вызов анонимной функции немедленно связано с предотвращением переменнойhi от "загрязнения глобальной сферы", и так какhi уже определено в функции, не так ли уже в локальной / частной области?

const myFunction = (
  function () {
    const hi = 'Hi!';
    return function () {
      console.log(hi);
    }
  }
)();