Есть несколько способов написать функцию; Один из способов — написать ключевое слово функции перед функцией или после установки переменной. Это обычные функции 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. обычные функции, так что давайте использовать их, когда это уместно!