Стрелочные функции = ›
Стрелочные функции - это краткая альтернатива стандартным выражениям функций JavaScript, но когда я впервые увидел синтаксис, я понятия не имел, как интерпретировать то, что делает эта строка кода… не говоря уже о том, как она была вызвана, чтобы найти ее в Google! Давайте посмотрим, когда они пригодятся, особенно когда дело доходит до this
.
Синтаксис:
Вероятно, вы знакомы со стандартным выражением функции в JavaScript:
// standard function expression: const sum = function(num1, num2) { return num1 + num2 } sum(2, 3) // 5
Стрелочные функции могут иметь либо краткое тело, либо обычное тело блока. краткий синтаксис обеспечивает неявное возвращаемое значение и экономит время и строки кода:
// concise body: const sum = (num1, num2) => num1 + num2 sum(2, 3) // 5
Наш =>
заменяет function
, {}
, ANDreturn
в стандартном функциональном выражении, сокращает общее количество строк кода до одной и по-прежнему возвращает тот же результат. Синтаксис блока требует явного возврата, но при этом экономит время и строки кода:
// blocky body: const multiply = (num1, num2) => { return num1 * num2; }; multiply(2, 3) // 6
Когда = ›полезно:
Используйте =>
для однострочных функций, которым требуется неявное возвращаемое значение. Стрелочные функции и их неявный возврат особенно полезны в случаях, когда вы хотите применить функцию много раз. Например, преобразование массива элементов с помощью map
- это простая задача со стрелочными функциями:
// transforming an array of elements: const names = objects.map(object => object.name); // often seen in fetch requests: function fetchDogs(){ fetch("https://dog.ceo/api/breeds/image/random") .then(response => response.json()) .then(addToDom) }
дело с `this` в том, что ...
Стрелочные функции становятся еще более мощными, когда дело доходит до this
в объектно-ориентированном JavaScript. Стрелочная функция не имеет собственного значения this
, но неявно связана блоком кода, в котором определена стрелочная функция, также известной как лексическая область видимости.
До ES6 и стрелочных функций перенос значения this
между областями функций имел несколько обходных решений, таких как установка значения, равного переменной, такой как that = this
или использование .bind
.
Стрелочные функции несут значение this
, как это определено блоком, в котором функция определена. Также следует отметить, что вы не можете изменить или принудить значение this
с помощью стрелочной функции, использующей .bind
. Стрелочная функция всегда отменяет любые ранее привязанные значения.
Чтобы узнать, что могут делать эти мощные маленькие функции, ознакомьтесь со следующими ресурсами: