Использование стрелочных функций вместе с 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
→ Ссылка
Есть некоторые отличия
- Интерпертатор языка сначала "сканирует" код на наличие объявления функций через function, что дает возможность вызвать функцию example1 до ее фактического написания. В случае example2 мы получаем ошибку, что нельзя вызывать переменную до ее объявления
- У стрелочной функции нет своего свойства this, она возьмет контекст this у своего родителя. В моем случае, я написал напрямую в html документе, и получил объект Window.
- Стрелочну функцию нельзя вызвать как конструктор
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