Назначение функции стрелки в качестве значения по умолчанию с помощью ||

Итак, я писал функцию, которая принимала бы аргумент (другую функцию), которой, когда она не определена, было бы присвоено значение по умолчанию. Назначение этого значения по умолчанию как ()=>{}, похоже, не работает. Однако, когда я оборачиваю функцию по умолчанию в (()=>{}) или пишу обычную function(), кажется, что все работает нормально. Что-то вроде этого кода ниже:


Не работает

const f1 = f2 => {
  f2 = f2 || () => alert("No default Listeners defined!");
}

Работающий

const f1 = f2 => {
  f2 = f2 || (() => alert("No default Listeners defined!"));
}

const f3 = f2 => {
  f2 = f2 || function() {
    alert("No default Listeners defined!")
  };
}


Могу ли я получить объяснение, почему первый не работает, а следующие 2 работают? Я подозреваю, что это может быть связано с объявлением функции V выражением функции и Я немного искал это, но не нашел правильного объяснения. Ссылки на то же самое будет достаточно. Спасибо.


comment
стоит посмотреть: stackoverflow.com/questions/50461820/, может быть, обман ...?   -  person Nina Scholz    schedule 07.07.2019
comment
Он анализируется так, как если бы вы написали f2 = (f2 || ()) => alert("No default Listeners defined!");   -  person Barmar    schedule 07.07.2019
comment
Это должно быть очевидно: f2 || () считается списком аргументов для => (определение функции стрелки), поэтому вы получили эту ошибку.   -  person Styx    schedule 07.07.2019
comment
Возможный дубликат Как использовать функцию стрелки с || оператор.   -  person str    schedule 07.07.2019
comment
Ах понял. Спасибо, парни. Итак, мне следует удалить вопрос или просто оставить его? Помогите мне здесь   -  person Amit Das    schedule 07.07.2019
comment
f2 = f2 || _ => alert тоже может работать   -  person Slai    schedule 07.07.2019