Executando verificação de segurança...
1
Carregando publicação patrocinada...
3

Várias dessas já são vantagens por evitar más práticas.

A existência de parâmetros com nomes duplicados é algo que obviamente não deveria ocorrer, tanto que não é permitido no modo estrito.

O uso de "this" é algo que você deve evitar, pois torna o código mais imprevisível e menos legível. No exemplo mencionado no post, é melhor simplesmente fazer:

let person = {
  name: "Ernane Ferreira",
  sayMyName: () => console.log(My name is ${person.name}.)
};

person.sayMyName(); // => My name is Ernane Ferreira.

Outra diferença que não foi mencionada no post e deve ser evitada é o hoisting. Funções clássicas podem ser utilizadas antes de serem declaradas, o que pode parecer bom inicialmente, mas torna o código menos legível e mais imprevisível, uma vez que o JavaScript é uma linguagem scriptada que é executada de cima para baixo.

Outra diferença não mencionada que deve ser evitada é a sobrecarga de funções (function overloading). Funções clássicas podem ser sobrescritas simplesmente declarando uma nova função com o mesmo nome. Não é preciso dizer que isso também torna o código mais imprevisível e menos legível.

Quanto ao restante das diferenças, acredito que sejam insignificantes. Por fim, também acredito que usar apenas arrow functions torna o código mais coeso, uma vez que as arrow functions são algo que você inevitavelmente usará em callbacks eventualmente.

1

Sendo bem sincero as vantagens que você listou, na minha opinião não compensão a pior legibilidade do código, talvez por eu ser acostumado com linguagens compiladas, mas para mim arrow functions são extremamente situacionais e deveriam ser usadas em contextos muito especificos e não como se fossem funções comuns, alem de impedirem o reaproveitamento de código etc.