Чем отличается дефолтный экспорт с именем и без?
В чем отличия этих дефолтных экспортов?
// 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