Почему IIFE стрелочная функция не работает, когда работает обычная IIFE?
Почему такой код работает:
(function() {
console.log(10);
}());
А такой же код, но уже через стрелочную функцию - не работает:
(() => {
console.log(10);
}());
И чтобы заработало нужно писать так:
(() => {
console.log(10);
})();
Ответы (2 шт):
Ответ понятно что таков синтаксис. Я просто думаю, сделано так чтоб не чесались руки сделать простую замену function () на () => во всех проектах не глядя. Хотя бы потому что контекст this в стрелочной функции и в обычной отличаются.
Насколько я помню, с этим моментом какое-то время была путаница: форму, которая сейчас вызывает ошибку, поддерживали некоторые версии движков, Babel, линтеры.
Причина разницы парсинга в том, что обычная функция и стрелочная по спецификации относятся к разным синтаксическим сущностям (CallExpression vs AssignmentExpression), и после подвида стрелочной функции не могут стоять скобки вызова.
Если погуглить, можно понатыкаться на объяснения:
https://github.com/airbnb/javascript/issues/828