Modern JS Cheatsheet / Памятка по современному JavaScript: Стрелочные функции
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
### <a name="arrow_func_concept"></a> Стрелочные функции Tomatoknight 29.09.17 в 15:22 |
|
|
В обновлении ES6 JavaScript добавлены *стрелочные функции*, которые являются еще одним способом объявления и использования функций. Вот некоторые их преимущества: a_popova 02.10.17 в 15:15 |
||
|
- краткость; Tomatoknight 29.09.17 в 15:26 |
||
|
#### Пример кода Tomatoknight 29.09.17 в 15:26 |
||
|
- Краткость и неявный возврат Tomatoknight 29.09.17 в 15:26 |
||
|
```js Tomatoknight 29.09.17 в 15:27 |
||
|
```js Tomatoknight 29.09.17 в 15:27 |
||
|
Связывание с *this* Tomatoknight 29.09.17 в 15:28 - Переменная *this* a_popova 02.10.17 в 15:16 |
||
|
В стрелочной функции *this* равняется значению *this* окружающего контекста исполнения. Со стрелочными функциями вам больше не придется заниматься фокусами вроде "that = this", чтобы объявить функцию внутри функции. Tomatoknight 29.09.17 в 15:29 Внутри стрелочной функции значение *this* равно значению *this* во внешней области видимости. В принципе, со стрелочными функциями вам больше не нужно делать трюк “that = this” перед вызовом функции внутри функции. a_popova 02.10.17 в 15:17 |
||
|
```js Tomatoknight 29.09.17 в 15:29 |
||
|
#### Подробное объяснение Tomatoknight 29.09.17 в 15:30 |
||
|
##### Краткость Tomatoknight 29.09.17 в 15:30 |
||
|
Стрелочные функции по ряду причин короче, чем традиционные. Рассмотрим все возможные случаи: Tomatoknight 29.09.17 в 15:30 Стрелочные функции являются более короткими, чем традиционные во многих случаях. Давайте рассмотрим все возможные случаи: a_popova 02.10.17 в 15:18 |
||
|
- Явный и неявный возврат Tomatoknight 29.09.17 в 15:30 |
||
|
В теле функции с **явным возвратом** используется ключевое слово *return*. Tomatoknight 29.09.17 в 15:31 **Явный возврат** - это функция, в теле которой используется ключевое слово **return**. a_popova 02.10.17 в 15:18 |
+4 | |
|
```js Tomatoknight 29.09.17 в 15:32 |
||
|
При традиционном способе написания функций возврат всегда был явным. Со стрелочными функциями его можно сделать *неявным*. Это значит, что для возврата значения не нужно писать ключевое слово *return*. Tomatoknight 29.09.17 в 15:33 В традиционном способе записи функций возврат всегда был явным. Но с помощью стрелочных функций вы можете делать неявный возврат, который означает, что вам не нужно использовать ключевое слово return, чтобы вернуть значение. a_popova 02.10.17 в 15:19 |
||
|
Чтобы возврат значения был неявным, код функции должен быть написан в виде однострочного выражения. Tomatoknight 29.09.17 в 15:36 |
||
|
```js Tomatoknight 29.09.17 в 15:36 |
||
|
Поскольку здесь нет ничего, кроме возвращаемого значения, возврат можно сделать неявным. Tomatoknight 29.09.17 в 15:37 |
||
|
```js Tomatoknight 29.09.17 в 15:37 |
||
|
Для этого нам просто нужно **убрать фигурные скобки** и ключевое слово **return**. Поэтому это и называется *неявным* возвратом: ключевого слова *return* нет, но функция все равно вернет ```x * 2```. Tomatoknight 29.09.17 в 15:38 |
+1 | |
|
> **Примечание**: если ваша функция не возвращает никаких значений (с *побочными эффектами*), то в ней нет ни явного, ни неявного возврата. Tomatoknight 29.09.17 в 15:43 > **Примечание:**: Если ваша функция не возвращает значение (имеет *побочные эффекты*), она не делает ни явного, ни неявного возврата. a_popova 02.10.17 в 15:20 |
||
|
- Только один аргумент Tomatoknight 29.09.17 в 15:43 |
||
|
Если ваша функция принимает только один параметр, можно опустить скобки вокруг него. Если мы снова обратимся к функции *double*: Tomatoknight 29.09.17 в 15:44 Если ваша функция принимает только один параметр, вы можете опустить скобки вокруг него. Если мы вернемся к функции *double* в коде выше: a_popova 02.10.17 в 15:20 |
||
|
```js Tomatoknight 29.09.17 в 15:44 |
||
|
Скобки вокруг единственного параметра можно не писать: Tomatoknight 29.09.17 в 15:44 Скобки вокруг этого параметра могут быть отброшены: a_popova 02.10.17 в 15:20 |
||
|
```js Tomatoknight 29.09.17 в 15:45 |
||
|
Нет аргументов Tomatoknight 29.09.17 в 15:45 - Без аргументов a_popova 02.10.17 в 15:21 |
||
|
Когда стрелочная функция вообще не принимает никаких аргументов, нужно написать пустые скобки, иначе синтаксис будет неверным. Tomatoknight 29.09.17 в 15:45 Когда у стрелочной функции нет ни одного параметра, вам нужно ставить скобки, иначе это будет неверный синтаксис. a_popova 02.10.17 в 15:21 |
||
|
```js Tomatoknight 29.09.17 в 15:46 |
||
|
```js Tomatoknight 29.09.17 в 15:46 |
||
|
Обращение к *this* Tomatoknight 29.09.17 в 15:46 ##### this ссылка a_popova 02.10.17 в 15:21 |
+3 | |
|
Чтобы понять этот нюанс, связанный со стрелочными функциями, вам нужно знать, как в JavaScript ведет себя [this](#this_def). Tomatoknight 29.09.17 в 15:47 Чтобы понять эту тонкость, представленную стрелочными функциями, вы должны понимать, как [this](#this_def) ведёт себя в JavaScript. a_popova 02.10.17 в 15:22 |
+1 | |
|
В стрелочной функции *this* равняется значению *this* окружающего контекста исполнения. Это значит, что стрелочная функция не создает собственного *this*, а берет его из окружения. Tomatoknight 29.09.17 в 15:48 В стрелочной функции значение *this* равно значению *this* внешнего окружения. Это означает, что стрелочная функция не создает новый *this*, а получает его из окружения. a_popova 02.10.17 в 15:22 |
||
|
Если вы не используете стрелочные функции и хотите получить доступ к переменной из *this* в функции внутри другой функции, вам придется использовать фокус с *that = this* или *self = this*. Tomatoknight 29.09.17 в 15:49 |
||
|
Вот, к примеру, использование функции setTimeout внутри функции myFunc: Tomatoknight 29.09.17 в 15:49 Например, использовать функцию setTimeout внутри myFunc: a_popova 02.10.17 в 15:23 |
+2 | |
|
```js Tomatoknight 29.09.17 в 15:51 |
||
|
console.log(this.myVar) // undefined -- см. объявление функции выше Tomatoknight 29.09.17 в 15:52 |
||
|
Но в случае стрелочных функций *this* берется из окружения: Tomatoknight 29.09.17 в 15:52 |
||
|
```js Tomatoknight 29.09.17 в 15:52 |
||
|
#### Полезные ресурсы Tomatoknight 29.09.17 в 15:52 |
||
|
- [Введение в стрелочные функции - WesBos](http://wesbos.com/arrow-functions/) Tomatoknight 29.09.17 в 15:54 |
