Есть несколько способов написать функцию; Один из способов — написать ключевое слово функции перед функцией или после установки переменной. Это обычные функции AKA.
Например:
функция приветствия(пользователя){
return `Hello, ${user}!`;
}
приветствие(‘пользователь) вернет нам «Привет, пользователь!»
Это объявление функции; Он имеет функцию ключевого слова вместе с объявлением имени и передаваемым аргументом.
Еще один пример:
let Weather = function() {
вернуть "хорошо"
}
Weather() вернет нам «хорошо»
Способ форматирования этой функции, мы называем это выражением функции, которое также является анонимной функцией, поскольку оно не имеет имени, связанного с функцией.
Итак, есть ли разница между использованием объявления функции и использованием функционального выражения?
Ответ есть, конечно, но не так много. Нет выбора, что лучше использовать из двух; либо или должно быть хорошо и должно возвращать то же значение.
VS. Функция стрелки:
const hello = () =› {
вернуть 'Hello there!"
}
hello() вернет нам «Привет!»
Стрелочная функция была представлена нам в ES2015; это в основном, когда кодеры устали писать функцию ключевого слова до или для функции в целом, поэтому, наконец, была придумана и установлена стрелочная функция. Как видите, это похоже на то, как пишется функциональное выражение, просто написанное с более коротким синтаксисом, как раз то, что нравится нам, программистам.
Хотя и обычные, и стрелочные функции являются функциями, существуют разные моменты времени/ситуации, когда можно использовать одну вместо другой.
Стрелочные функции и обычные функции:
Итак, что важно знать о стрелочных функциях? tего ключевое слово. Таким образом, в отличие от обычных функций, стрелочные функции не имеют собственной привязки this или аргументов. Вместо этого они разрешаются в пределах так называемой лексической области видимости. Это означает, что к переменной, определенной вне функции, можно будет получить доступ из другой функции, определенной после объявления переменной.
Сравнивая стрелочную функцию и обычную функцию, можно сказать, что у обычной функции есть свое this, в то время как о стрелочных функциях можно сказать обратное. Одним из преимуществ функции стрелки является отсутствие привязки this. Таким образом, независимо от среды, в которой была определена функция стрелки, это это.
Итак, что это это? Он имеет разные значения в зависимости от того, где он используется.
this относится к объекту-владельцу, когда он находится внутри метода. this является глобальным объектом, если используется отдельно. При использовании внутри функции this является глобальным объектом. this не определен внутри функции, когда она находится в «строгом» режиме. Внутри события this — это элемент, который получает событие.
В обычной функции .bind(this) требуется для добавления контекста this в функцию. В противном случае он будет автоматически определен как undefined по умолчанию. Также есть .call() и .apply(), которые можно использовать для этого. Функция стрелки не требуется для .bind(this) для передачи контекста this.
Хотя у стрелочных функций есть преимущества, такие как написание более короткого кода, отсутствие привязки this, он не должен полностью заменять обычные функции!Например, их не следует использовать с функциями обратного вызова и объектными методами. В объектном методе, поскольку this ни к чему не привязано, его значением будет родительская область. Пример кода:
const katie= {
homework: 5,
done: () => {
this.homework--;
}
}
Пример кода функции обратного вызова со стрелочными функциями:
const button = document.getElementById('p');
button.addEventListener('click', () => {
this.alert("hi");
});
Это не лучшая ситуация для использования функции стрелки, так как это даст ошибку TypeError. Причина проста, это, как указано ранее, привязано к родительской области, но не привязано к кнопке, поэтому addEventListener не будет выполняться.
Итак, когда именно следует использовать стрелочные функции??
Вы угадали; когда требуется привязка к контексту, а не к функции! Я также недавно начал привыкать просто автоматически использовать стрелочные функции при написании функции, но мне также потребовалось некоторое время, чтобы привыкнуть к ее синтаксису. Я так привык писать обычные функции, что не мог привыкнуть к написанию стрелочных функций, и теперь я чувствую, что пишу стрелочные функции лучше! Но есть время использовать стрелку VS. обычные функции, так что давайте использовать их, когда это уместно!