Использование стрелочных функций вместе с function()

Приемлемо ли, с точки зрения стандарта кода ES6, использовать и стрелочные, и function() выражения в коде? Если нет, то как создать именованную функцию со стрелочным определением?

async function start() {
    try {
        await mongoose.connect(config.db, {
            useNewUrlParser: true,
            useUnifiedTopology: true
        });
    } catch(e) {
        console.log('Error while connecting to DB');
        process.exit(code:1);
    }
}

start()

mongoose.connection.on('connected', () => {
    console.log('Connected to database');
});


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

Автор решения: Gelloiss
const name = (param1, param2) => {...}

Если параметр только один, то можно так

const name = param => {...}

Если параметров нет, то так

const name = () => {...}

Лучше забудьте о просто function и используйте только стрелочные.

→ Ссылка
Автор решения: qRi

Есть некоторые отличия

  1. Интерпертатор языка сначала "сканирует" код на наличие объявления функций через function, что дает возможность вызвать функцию example1 до ее фактического написания. В случае example2 мы получаем ошибку, что нельзя вызывать переменную до ее объявления
  2. У стрелочной функции нет своего свойства this, она возьмет контекст this у своего родителя. В моем случае, я написал напрямую в html документе, и получил объект Window.
  3. Стрелочну функцию нельзя вызвать как конструктор

example1(123) // this.a = 123
example2(123) // ReferenceError

function example1(a) {
  console.log( arguments ) // ..arguments
  this.a = a
  console.log( this.a )
}

const example2 = a => {
  this.a = a
  console.log( arguments ) // ReferenceError: arguments is not defined
  console.log( this )
}

example2(123) // Window object

const a = new example1(23)
console.log(a) // example1 { a: 23 }
const b = new example2(44)  // TypeError: example2 is not a contructor

→ Ссылка