Функции стрелок в ES2015 обеспечивают более сжатый синтаксис. Могу ли я заменить все мои объявления / выражения функций функциями стрелок? Что мне нужно искать?
Примеры:
Функция конструктора
function User(name) {
this.name = name;
}
// vs
const User = name => {
this.name = name;
};
Методы прототипа
User.prototype.getName = function() {
return this.name;
};
// vs
User.prototype.getName = () => this.name;
Объект (литерал)
const obj = {
getName: function() {
// ...
}
};
// vs
const obj = {
getName: () => {
// ...
}
};
Обратные вызовы
setTimeout(function() {
// ...
}, 500);
// vs
setTimeout(() => {
// ...
}, 500);
Вариадические функции
function sum() {
let args = [].slice(arguments);
// ...
}
// vs
const sum = () => {
let args = [].slice(arguments);
// ...
};
Посмотрите на этот пример Plnkr
Переменная this сильно отличается timesCalled с шагом 1 при каждом вызове кнопки. Ответ на мой личный вопрос:
.click( () => { } )
и
.click(function() { })
создают одинаковое количество функций при использовании в цикле, как вы можете видеть из подсчета Guid в Plnkr.