Учебник по JS

ГЛАВНАЯ JS Введение JS Куда Вывод JS Заявления JS JS-синтаксис JS-комментарии JS-переменные JS Пусть Константа JS JS-операторы JS-арифметика Назначение JS JS-типы данных JS-функции JS-объекты JS-события JS-строки Строковые методы JS Поиск строки JS Шаблоны строк JS JS-номера Методы номеров JS JS-массивы Методы массива JS Сортировка массива JS Итерация массива JS Константа массива JS JS-даты Форматы даты JS Методы получения даты JS Методы установки даты JS JS-математика JS Случайный JS Булевы значения Сравнение JS JS-условия JS-переключатель JS цикл для Цикл JS для входа Цикл JS для Цикл JS во время Перерыв JS JS-итерации JS-наборы JS-карты JS Typeof Преобразование типов JS JS побитовый JS регулярное выражение JS-ошибки Область JS JS-подъем Строгий режим JS JS это ключевое слово Функция стрелки JS JS-классы JS JSON JS-отладка Руководство по стилю JS Лучшие практики JS JS-ошибки JS-производительность Зарезервированные слова JS

JS-версии

JS-версии JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE/пограничный История JS

JS-объекты

Определения объектов Свойства объекта Методы объекта Отображение объекта Средства доступа к объектам Конструкторы объектов Прототипы объектов Итерации объектов Наборы объектов Карты объектов Ссылка на объект

JS-функции

Определения функций Параметры функции Вызов функции Вызов функции Функция Применить Закрытие функций

JS-классы

Введение в класс Наследование классов Статический класс

JS асинхронный

Обратные вызовы JS JS асинхронный JS-обещания JS асинхронный/ожидание

JS HTML DOM

Дом Введение DOM-методы Документ DOM DOM-элементы DOM HTML DOM-формы ДОМ CSS DOM-анимации События ДОМ Слушатель событий DOM DOM-навигация DOM-узлы Коллекции DOM Списки узлов DOM

Спецификация браузера JS

JS-окно JS-экран Местоположение JS История JS JS-навигатор Всплывающее оповещение JS JS Тайминг JS-куки

JS-веб-API

Введение в веб-API API веб-форм API истории веб-поиска API веб-хранилища API веб-работника API веб-выборки API веб-геолокации

JS АЯКС

Введение в АЯКС AJAX XMLHttp АЯКС-запрос AJAX-ответ XML-файл AJAX АЯКС PHP АЯКС АСП База данных AJAX AJAX-приложения Примеры AJAX

JS JSON

Введение в JSON Синтаксис JSON JSON против XML Типы данных JSON Анализ JSON Строковая JSON JSON-объекты JSON-массивы JSON-сервер JSON PHP JSON HTML JSON JSONP

JS против JQuery

Селекторы jQuery JQuery HTML jQuery CSS JQuery DOM

JS-графика

JS-графика JS Холст JS сюжет JS Chart.js JS Google Диаграмма JS D3.js

JS-примеры

JS-примеры JS HTML DOM JS HTML-ввод HTML-объекты JS HTML-события JS JS-браузер JS-редактор JS-упражнения JS-викторина JS-сертификат

JS-ссылки

Объекты JavaScript HTML DOM-объекты


Функция стрелки JavaScript

Стрелочные функции были представлены в ES6.

Стрелочные функции позволяют нам писать более короткий синтаксис функции:

let myFunction = (a, b) => a * b;

До:

hello = function() {
  return "Hello World!";
}

С функцией стрелки:

hello = () => {
  return "Hello World!";
}

Становится короче! Если функция имеет только один оператор, и оператор возвращает значение, вы можете удалить скобки и ключевоеreturn слово:

Стрелочные функции возвращают значение по умолчанию:

hello = () => "Hello World!";

Примечание. Это работает, только если функция имеет только один оператор.

Если у вас есть параметры, вы передаете их в круглых скобках:

Стрелочная функция с параметрами:

hello = (val) => "Hello " + val;

На самом деле, если у вас есть только один параметр, вы также можете пропустить круглые скобки:

Стрелочная функция без скобок:

hello = val => "Hello " + val;
this


Что о this?

Обработка thisстрелочных функций также отличается от обычных функций.

Короче, со стрелочными функциями нет привязки this.

В обычных функциях thisключевое слово представляет объект, который вызывает функцию, которая может быть окном, документом, кнопкой или чем-то еще.

В стрелочных функциях thisключевое слово всегда представляет объект, определяющий стрелочную функцию.

Давайте рассмотрим два примера, чтобы понять разницу.

Оба примера вызывают метод дважды, сначала при загрузке страницы и еще раз, когда пользователь нажимает кнопку.

В первом примере используется обычная функция, а во втором — стрелочная функция.

Результат показывает, что первый пример возвращает два разных объекта (окно и кнопку), а второй пример дважды возвращает объект окна, потому что объект окна является «владельцем» функции.

Пример

Обычная функция thisпредставляет объект, вызывающий функцию:

// Regular Function:
hello = function() {
  document.getElementById("demo").innerHTML += this;
}

// The window object calls the function:
window.addEventListener("load", hello);

// A button object calls the function:
document.getElementById("btn").addEventListener("click", hello);

Пример

Функция со стрелкой thisпредставляет владельца функции:

// Arrow Function:
hello = () => {
  document.getElementById("demo").innerHTML += this;
}

// The window object calls the function:
window.addEventListener("load", hello);

// A button object calls the function:
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