Чем отличается дефолтный экспорт с именем и без?

В чем отличия этих дефолтных экспортов?

// mod.js
export default function Foo() { // С именем
  console.log("Bar");
}

...и...

// mod.js
export default function() { // Без имени
  console.log("Bar");
}

...раз они одинаково хорошо импортируются без изменения конструкции импорта?

// App.js
import Foo from "./mod.js"; // В обеих случаях

Foo(); // Работает

Если функция экспортировалась без имени, то ей дается имя, которое мы передаем в импорте. Если же с именем, то... Даже если мы передадим другое имя (которое отличается от экспорта), оно так же присвоится импортируемой функции:

import Yee from "./mod.js"; // Другое имя

Yee(); // Тоже прекрасно работает в обеих случаях

Ответы (1 шт):

Автор решения: Grundy

Как можно увидеть в спецификации единственным отличием этих двух форм является строка

SetFunctionName(F, name).

для варианта с именем и

SetFunctionName(F, "default")

для варианта - без.

Таким образом, если проверить значение свойства name импортируемых функций, можно заметить что для

export default function Foo()

будет выведено Foo, а для

export default function() { // Без имени

будет выведено default

→ Ссылка