You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/15-function-expressions-arrows/article.md
+24-24Lines changed: 24 additions & 24 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,15 +2,15 @@
2
2
3
3
Функции в JavaScript, это не магическая языковая структура, а специальный вид значений.
4
4
5
-
Синтаксис, который мы использовали до этого называется *Function Declaration* (объявление функции):
5
+
Синтаксис, который мы использовали до этого называется *Объявлением Функции* (Function Declaration):
6
6
7
7
```js
8
8
functionsayHi() {
9
9
alert( "Привет" );
10
10
}
11
11
```
12
12
13
-
Существует ещё один синтаксис для создания функций, который называется *Function Expression* (функциональное выражение).
13
+
Существует ещё один синтаксис создания функций, который называется *Функциональным Выражением* (Function Expression).
14
14
15
15
Оно выглядит вот так:
16
16
@@ -60,13 +60,13 @@ sayHi(); // Hello // прежняя тоже работает (почем
60
60
61
61
Давайте детально разберём всё, что тут произошло:
62
62
63
-
1.*Function Declaration*`(1)` создало функцию и присвоило её значение переменной с именем `sayHi`.
63
+
1.Объявление функции`(1)` создало функцию и присвоило её значение переменной с именем `sayHi`.
64
64
2. В строке `(2)` мы скопировали её значение в переменную `func`.
65
65
66
66
Обратите внимание (ещё раз): нет круглых скобок после `sayHi`. Если бы они были, то выражение `func = sayHi()` "записало" бы *результат вызова*`sayHi()` в переменную `func`, а не саму *функцию*`sayHi`.
67
67
3. Теперь функция может быть вызвана с помощью обеих переменных `sayHi()` и `func()`.
68
68
69
-
Заметьте, что мы можем использовать и *Function Expression* чтобы создать `sayHi`, в первой строке:
69
+
Заметьте, что мы можем использовать и Функциональное Выражение чтобы создать `sayHi`, в первой строке:
70
70
71
71
```js
72
72
letsayHi=function() { ... };
@@ -79,7 +79,7 @@ let func = sayHi;
79
79
80
80
81
81
````smart header="Зачем нужна точка с запятой в конце?"
82
-
У вас мог возникнуть вопрос: Почему в *Function Expression* ставится точка с запятой `;` на конце, а в *Function Declaration* нет:
82
+
У вас мог возникнуть вопрос: Почему в Функциональном Выражении ставится точка с запятой `;` на конце, а в Объявлении Функции нет:
83
83
84
84
```js
85
85
function sayHi() {
@@ -93,7 +93,7 @@ let sayHi = function() {
93
93
94
94
Ответ прост:
95
95
- Нет необходимости в закрывающей `;` блоков кода и синтаксических конструкций, использующих их, таких как `if { ... }`, `for { }`, `function f { }` и т.д.
96
-
- *Function Expression* использует внутри себя инструкцию: `let sayHi = ...;`, как значение. Это не является блоком кода. И точки с запятой `;` рекомендуется ставить на конце инструкций, не зависимо от их значений. Таким образом, точка с запятой не относится непосредственно к *Function Expression*, оно лишь выполняет внутри себя инструкцию.
96
+
- Функциональное Выражение использует внутри себя инструкцию: `let sayHi = ...;`, как значение. Это не является блоком кода. И точки с запятой `;` рекомендуется ставить на конце инструкций, не зависимо от их значений. Таким образом, точка с запятой не относится непосредственно к Функциональному Выражению, оно лишь выполняет внутри себя инструкцию.
97
97
````
98
98
99
99
## Колбэки
@@ -139,7 +139,7 @@ ask("Do you agree?", showOk, showCancel);
139
139
140
140
Ключевая идея в том, что мы передаём функцию и ожидаем, что она вызовется обратно ("called back") когда-нибудь позже, если это будет необходимо. В нашем случае, `showOk` становится *колбэком*' для ответа "yes", а `showCancel` -- для ответа "no".
141
141
142
-
Мы можем переписать этот пример значительно короче, используя *Function Expressions* (функциональные выражения):
142
+
Мы можем переписать этот пример значительно короче, используя Функциональные Выражения:
143
143
144
144
```js run no-beautify
145
145
functionask(question, yes, no) {
@@ -172,44 +172,44 @@ ask(
172
172
```
173
173
174
174
175
-
## *Function Expression* в сравнении с *Function Declaration*
175
+
## Функциональное Выражение в сравнении с Объявлением Функции
176
176
177
-
Давайте разберём ключевые отличия *Function Declarations* (объявления функций) от *Function Expressions* (функциональных выражений).
177
+
Давайте разберём ключевые отличия Объявления Функций от Функциональных Выражений.
178
178
179
179
Во-первых, синтаксис: как мы можем видеть это из кода.
180
180
181
-
- В случае *Function Declaration:* функция объявляется, как отдельная инструкция в основном потоке кода.
181
+
- В случае Объявления Функции: функция объявляется, как отдельная инструкция в основном потоке кода.
182
182
183
183
```js
184
-
//Function Declaration
184
+
//Объявление Функции
185
185
functionsum(a, b) {
186
186
return a + b;
187
187
}
188
188
```
189
-
- В случае *Function Expression:* функция создаётся внутри выражения или другой синтаксической конструкции. В данном случае функция создаётся в правой части "выражения присваивания"`=`:
189
+
- В случае Функциональным Выражением: функция создаётся внутри выражения или другой синтаксической конструкции. В данном случае функция создаётся в правой части "выражения присваивания"`=`:
190
190
191
191
```js
192
-
// Function Expression
192
+
// Функциональное Выражение
193
193
let sum = function(a, b) {
194
194
return a + b;
195
195
};
196
196
```
197
197
198
198
Более тонкое отличие состоит, в том, *когда* создаётся функция движком JavaScript.
199
199
200
-
**Function Expression создаётся, когда выполнение доходит до него, и затем уже может использоваться.**
200
+
**Функциональное Выражение создаётся, когда выполнение доходит до него, и затем уже может использоваться.**
201
201
202
202
После того, как поток выполнения достигнет правой части выражения присваивания `let sum = function…`-- с этого момента, функция считается созданной и может быть использована (присвоена переменной, вызвана и т.д. ).
203
203
204
-
*С *Function Declaration* всё иначе.
204
+
С Объявлением Функций всё иначе.
205
205
206
-
**Function Declaration применимы ко всему скрипту или блоку кода.**
206
+
**Объявление Функции применимы ко всему скрипту или блоку кода.**
207
207
208
-
Другими словами, когда движок JavaScript *подготавливает* к выполнению скрипт или блок кода, прежде всего в нём происходит поиск *Function Declarations*, а затем создаются все найденные функции, созданные таким образом. Можно считать этот процесс "стадией инициализации".
208
+
Другими словами, когда движок JavaScript *подготавливает* к выполнению скрипт или блок кода, прежде всего в нём происходит поиск Объявлений Функций, а затем создаются все найденные функции, созданные таким образом. Можно считать этот процесс "стадией инициализации".
209
209
210
210
И только после того, как все объявления функций будут обработаны, продолжиться выполнение остального кода.
211
211
212
-
В результате, функции, созданные, как *Function Declaration* могут быть вызваны раньше своих определений.
212
+
В результате, функции, созданные, как Объявление Функции могут быть вызваны раньше своих определений.
213
213
214
214
Например, так будет работать:
215
215
@@ -223,9 +223,9 @@ function sayHi(name) {
223
223
}
224
224
```
225
225
226
-
*Function Declaration*`sayHi` было создано, когда движок JavaScript приготавливал скрипт к выполнению, и такая функция отовсюду.
226
+
Объявление Функции`sayHi` было создано, когда движок JavaScript приготавливал скрипт к выполнению, и такая функция отовсюду.
227
227
228
-
...В случае с *Function Expression*, такой код вызовет ошибку:
228
+
...В случае с Функциональным Выражением, такой код вызовет ошибку:
229
229
230
230
```js run refresh untrusted
231
231
*!*
@@ -239,7 +239,7 @@ let sayHi = function(name) { // (*) магии больше нет
239
239
240
240
Функциональные выражения создаются тогда, когда выполнение доходит до них. Это случится только на строке, помеченной звёздочкой `(*)`. Слишком поздно.
241
241
242
-
**Когда Function Declaration создаётся для блока кода, оно становится доступно везде внутри блока. Но не снаружи него.**
242
+
**Когда Объявление Функции создаётся для блока кода, оно становится доступно везде внутри блока. Но не снаружи него.**
243
243
244
244
Иногда очень удобно создать локальную функцию лишь для отдельного блока кода, однако этот приём также может создать проблемы.
245
245
@@ -271,7 +271,7 @@ welcome(); // Ошибка: welcome is not defined
271
271
*/!*
272
272
```
273
273
274
-
Это произошло, так как *Function Declaration* видимо только внутри блока кода в котором располагается.
274
+
Это произошло, так как Объявление Функции видимо только внутри блока кода в котором располагается.
275
275
276
276
Вот ещё один пример:
277
277
@@ -284,7 +284,7 @@ if (age < 18) {
284
284
*/!*
285
285
// |
286
286
function welcome() { // |
287
-
alert("Hello!"); // | Function Declaration доступно
287
+
alert("Hello!"); // | Объявление Функции доступно
288
288
} // | во всём блоке кода, в котором объявлено
289
289
// |
290
290
*!*
@@ -299,7 +299,7 @@ if (age < 18) {
299
299
}
300
300
301
301
// здесь фигурная скобка закрывается,
302
-
// поэтому, Function Declarations, созданные внутри блока кода выше -- недоступны отсюда.
302
+
// поэтому, Объявления Функций, созданные внутри блока кода выше -- недоступны отсюда.
0 commit comments