Объявление функции через переменную против function

Я не знаю как правильно это описать в заголовке, но хочу понять вот что..
Зачем объявлять функцию так:

const funcName = () => {};

... или так:

const funcName = function () {};

... а не так:

function funcName() {};

Если мы находимся в глобальной области.
Я понимаю, что первые две функции можно вызвать лишь после их нахождения в коде, а последнюю можно вызвать до ее нахождения в коде.
Но каков смысл их объявления в начале? Разве это удобно, ведь придется их вечно пролистывать, чтобы перейти к "основному" коду.


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

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

Для кого-то это дело вкуса. А для кого-то важны такие особенности:

  1. Hoisting может быть нежелательным, нужно более строгое и предсказуемое поведение кода.

  2. Переменную const нельзя переопределить, а переменную function можно (а в нестрогом режиме можно ещё и объявить несколько раз), и это может привести к путанице:

function funcName() { 42; }
console.log(funcName.toString()); // function funcName() { 0; }
function funcName() { 0; }
console.log(funcName.toString()); // function funcName() { 0; }
funcName = 42;
console.log(funcName); // 42

  1. Переменная с function (как и переменная var) в глобальной области видимости создаёт свойство в объекте window, засоряя глобальную область видимости, а переменная const — нет.

const func1 = function () {};
function func2() {}

console.log(window.func1); // undefined
console.log(window.func2); // function func2() {}

→ Ссылка