Skip to content

Commit 7687877

Browse files
committed
fix Function Declaration & Function Expression
1 parent 75ce85d commit 7687877

1 file changed

Lines changed: 24 additions & 24 deletions

File tree

  • 1-js/02-first-steps/15-function-expressions-arrows

1-js/02-first-steps/15-function-expressions-arrows/article.md

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
Функции в JavaScript, это не магическая языковая структура, а специальный вид значений.
44

5-
Синтаксис, который мы использовали до этого называется *Function Declaration* (объявление функции):
5+
Синтаксис, который мы использовали до этого называется *Объявлением Функции* (Function Declaration):
66

77
```js
88
function sayHi() {
99
alert( "Привет" );
1010
}
1111
```
1212

13-
Существует ещё один синтаксис для создания функций, который называется *Function Expression* (функциональное выражение).
13+
Существует ещё один синтаксис создания функций, который называется *Функциональным Выражением* (Function Expression).
1414

1515
Оно выглядит вот так:
1616

@@ -60,13 +60,13 @@ sayHi(); // Hello // прежняя тоже работает (почем
6060

6161
Давайте детально разберём всё, что тут произошло:
6262

63-
1. *Function Declaration* `(1)` создало функцию и присвоило её значение переменной с именем `sayHi`.
63+
1. Объявление функции `(1)` создало функцию и присвоило её значение переменной с именем `sayHi`.
6464
2. В строке `(2)` мы скопировали её значение в переменную `func`.
6565

6666
Обратите внимание (ещё раз): нет круглых скобок после `sayHi`. Если бы они были, то выражение `func = sayHi()` "записало" бы *результат вызова* `sayHi()` в переменную `func`, а не саму *функцию* `sayHi`.
6767
3. Теперь функция может быть вызвана с помощью обеих переменных `sayHi()` и `func()`.
6868

69-
Заметьте, что мы можем использовать и *Function Expression* чтобы создать `sayHi`, в первой строке:
69+
Заметьте, что мы можем использовать и Функциональное Выражение чтобы создать `sayHi`, в первой строке:
7070

7171
```js
7272
let sayHi = function() { ... };
@@ -79,7 +79,7 @@ let func = sayHi;
7979

8080

8181
````smart header="Зачем нужна точка с запятой в конце?"
82-
У вас мог возникнуть вопрос: Почему в *Function Expression* ставится точка с запятой `;` на конце, а в *Function Declaration* нет:
82+
У вас мог возникнуть вопрос: Почему в Функциональном Выражении ставится точка с запятой `;` на конце, а в Объявлении Функции нет:
8383
8484
```js
8585
function sayHi() {
@@ -93,7 +93,7 @@ let sayHi = function() {
9393
9494
Ответ прост:
9595
- Нет необходимости в закрывающей `;` блоков кода и синтаксических конструкций, использующих их, таких как `if { ... }`, `for { }`, `function f { }` и т.д.
96-
- *Function Expression* использует внутри себя инструкцию: `let sayHi = ...;`, как значение. Это не является блоком кода. И точки с запятой `;` рекомендуется ставить на конце инструкций, не зависимо от их значений. Таким образом, точка с запятой не относится непосредственно к *Function Expression*, оно лишь выполняет внутри себя инструкцию.
96+
- Функциональное Выражение использует внутри себя инструкцию: `let sayHi = ...;`, как значение. Это не является блоком кода. И точки с запятой `;` рекомендуется ставить на конце инструкций, не зависимо от их значений. Таким образом, точка с запятой не относится непосредственно к Функциональному Выражению, оно лишь выполняет внутри себя инструкцию.
9797
````
9898

9999
## Колбэки
@@ -139,7 +139,7 @@ ask("Do you agree?", showOk, showCancel);
139139

140140
Ключевая идея в том, что мы передаём функцию и ожидаем, что она вызовется обратно ("called back") когда-нибудь позже, если это будет необходимо. В нашем случае, `showOk` становится *колбэком*' для ответа "yes", а `showCancel` -- для ответа "no".
141141

142-
Мы можем переписать этот пример значительно короче, используя *Function Expressions* (функциональные выражения):
142+
Мы можем переписать этот пример значительно короче, используя Функциональные Выражения:
143143

144144
```js run no-beautify
145145
function ask(question, yes, no) {
@@ -172,44 +172,44 @@ ask(
172172
```
173173

174174

175-
## *Function Expression* в сравнении с *Function Declaration*
175+
## Функциональное Выражение в сравнении с Объявлением Функции
176176

177-
Давайте разберём ключевые отличия *Function Declarations* (объявления функций) от *Function Expressions* (функциональных выражений).
177+
Давайте разберём ключевые отличия Объявления Функций от Функциональных Выражений.
178178

179179
Во-первых, синтаксис: как мы можем видеть это из кода.
180180

181-
- В случае *Function Declaration:* функция объявляется, как отдельная инструкция в основном потоке кода.
181+
- В случае Объявления Функции: функция объявляется, как отдельная инструкция в основном потоке кода.
182182

183183
```js
184-
// Function Declaration
184+
// Объявление Функции
185185
function sum(a, b) {
186186
return a + b;
187187
}
188188
```
189-
- В случае *Function Expression:* функция создаётся внутри выражения или другой синтаксической конструкции. В данном случае функция создаётся в правой части "выражения присваивания" `=`:
189+
- В случае Функциональным Выражением: функция создаётся внутри выражения или другой синтаксической конструкции. В данном случае функция создаётся в правой части "выражения присваивания" `=`:
190190

191191
```js
192-
// Function Expression
192+
// Функциональное Выражение
193193
let sum = function(a, b) {
194194
return a + b;
195195
};
196196
```
197197

198198
Более тонкое отличие состоит, в том, *когда* создаётся функция движком JavaScript.
199199

200-
**Function Expression создаётся, когда выполнение доходит до него, и затем уже может использоваться.**
200+
**Функциональное Выражение создаётся, когда выполнение доходит до него, и затем уже может использоваться.**
201201

202202
После того, как поток выполнения достигнет правой части выражения присваивания `let sum = function…` -- с этого момента, функция считается созданной и может быть использована (присвоена переменной, вызвана и т.д. ).
203203

204-
*С *Function Declaration* всё иначе.
204+
С Объявлением Функций всё иначе.
205205

206-
**Function Declaration применимы ко всему скрипту или блоку кода.**
206+
**Объявление Функции применимы ко всему скрипту или блоку кода.**
207207

208-
Другими словами, когда движок JavaScript *подготавливает* к выполнению скрипт или блок кода, прежде всего в нём происходит поиск *Function Declarations*, а затем создаются все найденные функции, созданные таким образом. Можно считать этот процесс "стадией инициализации".
208+
Другими словами, когда движок JavaScript *подготавливает* к выполнению скрипт или блок кода, прежде всего в нём происходит поиск Объявлений Функций, а затем создаются все найденные функции, созданные таким образом. Можно считать этот процесс "стадией инициализации".
209209

210210
И только после того, как все объявления функций будут обработаны, продолжиться выполнение остального кода.
211211

212-
В результате, функции, созданные, как *Function Declaration* могут быть вызваны раньше своих определений.
212+
В результате, функции, созданные, как Объявление Функции могут быть вызваны раньше своих определений.
213213

214214
Например, так будет работать:
215215

@@ -223,9 +223,9 @@ function sayHi(name) {
223223
}
224224
```
225225

226-
*Function Declaration* `sayHi` было создано, когда движок JavaScript приготавливал скрипт к выполнению, и такая функция отовсюду.
226+
Объявление Функции `sayHi` было создано, когда движок JavaScript приготавливал скрипт к выполнению, и такая функция отовсюду.
227227

228-
...В случае с *Function Expression*, такой код вызовет ошибку:
228+
...В случае с Функциональным Выражением, такой код вызовет ошибку:
229229

230230
```js run refresh untrusted
231231
*!*
@@ -239,7 +239,7 @@ let sayHi = function(name) { // (*) магии больше нет
239239

240240
Функциональные выражения создаются тогда, когда выполнение доходит до них. Это случится только на строке, помеченной звёздочкой `(*)`. Слишком поздно.
241241

242-
**Когда Function Declaration создаётся для блока кода, оно становится доступно везде внутри блока. Но не снаружи него.**
242+
**Когда Объявление Функции создаётся для блока кода, оно становится доступно везде внутри блока. Но не снаружи него.**
243243

244244
Иногда очень удобно создать локальную функцию лишь для отдельного блока кода, однако этот приём также может создать проблемы.
245245

@@ -271,7 +271,7 @@ welcome(); // Ошибка: welcome is not defined
271271
*/!*
272272
```
273273

274-
Это произошло, так как *Function Declaration* видимо только внутри блока кода в котором располагается.
274+
Это произошло, так как Объявление Функции видимо только внутри блока кода в котором располагается.
275275

276276
Вот ещё один пример:
277277

@@ -284,7 +284,7 @@ if (age < 18) {
284284
*/!*
285285
// |
286286
function welcome() { // |
287-
alert("Hello!"); // | Function Declaration доступно
287+
alert("Hello!"); // | Объявление Функции доступно
288288
} // | во всём блоке кода, в котором объявлено
289289
// |
290290
*!*
@@ -299,7 +299,7 @@ if (age < 18) {
299299
}
300300
301301
// здесь фигурная скобка закрывается,
302-
// поэтому, Function Declarations, созданные внутри блока кода выше -- недоступны отсюда.
302+
// поэтому, Объявления Функций, созданные внутри блока кода выше -- недоступны отсюда.
303303
304304
*!*
305305
welcome(); // Ошибка: welcome is not defined

0 commit comments

Comments
 (0)