JavaScript Функция стрелки
Функции стрелки (или стрелочные функции) были введены в ES6.
Стрелочные функции позволяют нам писать более короткий синтаксис функций:
Код становится короче! Если функция имеет только один оператор, и оператор возвращает значение, вы можете удалить скобки и ключевое слово return
:
Стрелочные функции возвращают значение по умолчанию:
hello = () => "Hello World!";
Примечание: Это работает, если функция имеет только один оператор.
Если есть параметры, вы передаёте их в круглых скобках:
Фактически, если есть только один параметр, вы также можете пропустить круглые скобки:
А что насчёт this
?
Обработка this
также отличается в стрелочных функциях от обычных функций.
Короче говоря, со стрелочными функциями нет привязки this
.
В обычных функциях ключевое слово this
представляет объект, вызывающий функцию, которым может быть окно, документ, кнопка или что-то ещё.
Для стрелочных функций this
ключевое слово always представляет объект, определяющий стрелочную функцию.
Давайте рассмотрим два примера, чтобы понять разницу.
Оба примера вызывают метод дважды: сначала при загрузке страницы, и ещё раз, когда пользователь нажимает кнопку.
В первом примере используется обычная функция, а во втором - стрелочная функция.
Результат показывает, что первый пример возвращает два разных объекта (окно и кнопку), а второй пример возвращает объект окна дважды, поскольку объект окна является "владельцем" функции.
Пример
В обычной функции this
представляет объект, который вызывает функцию:
// Обычная функция:
hello = function() {
document.getElementById("demo").innerHTML += this;
}
// Объект окна вызывает функцию:
window.addEventListener("load", hello);
// Объект кнопки вызывает функцию:
document.getElementById("btn").addEventListener("click", hello);
Пример
С помощью функции стрелки this
представляет владельца функции:
// Функция стрелки:
hello = () => {
document.getElementById("demo").innerHTML += this;
}
// Объект окна вызывает функцию:
window.addEventListener("load", hello);
// Объект кнопки вызывает функцию:
document.getElementById("btn").addEventListener("click", hello);
Помните об этих различиях, когда работаете с функциями. Иногда поведение обычных функций - это то, что вам нужно, если нет, используйте стрелочные функции.
Поддержка браузерами
В следующей таблице определены первые версии браузеров с полной поддержкой функций стрелок в JavaScript:
Chrome 45 | Edge 12 | Firefox 22 | Safari 10 | Opera 32 |
Sep, 2015 | Jul, 2015 | May, 2013 | Sep, 2016 | Sep, 2015 |