Skip to content

Commit 0fc5817

Browse files
committed
update article
1 parent 9567e95 commit 0fc5817

1 file changed

Lines changed: 32 additions & 32 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: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,13 @@ sayHi(); // Hello // прежняя тоже работает (почем
6060

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

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

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

69-
Заметьте, что мы можем использовать и *Function Expression* чтобы создать `sayHi`, в первой строке:
69+
Заметьте, что мы можем использовать и Function Expression чтобы создать `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+
У вас мог возникнуть вопрос: Почему в Function Expression ставится точка с запятой `;` на конце, а в Function Declaration нет:
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+
- Function Expression использует внутри себя инструкцию: `let sayHi = ...;`, как значение. Это не является блоком кода. И точки с запятой `;` рекомендуется ставить на конце инструкций, не зависимо от их значений. Таким образом, точка с запятой не относится непосредственно к Function Expression, оно лишь выполняет внутри себя инструкцию.
9797
````
9898

9999
## Колбэки
@@ -139,7 +139,7 @@ ask("Вы согласны?", showOk, showCancel);
139139

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

142-
Мы можем переписать этот пример значительно короче, используя *Function Expression*:
142+
Мы можем переписать этот пример значительно короче, используя Function Expression:
143143

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

174174

175-
## *Function Expression* в сравнении с *Function Declaration*
175+
## Function Expression в сравнении с Function Declaration
176176

177-
Давайте разберём ключевые отличия *Function Declaration* от *Function Expression*.
177+
Давайте разберём ключевые отличия Function Declaration от Function Expression.
178178

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

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

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

191191
```js
192192
// Function Expression
@@ -197,19 +197,19 @@ ask(
197197

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

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

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

204-
С *Function Declaration* всё иначе.
204+
С Function Declaration всё иначе.
205205

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

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

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

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

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

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

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

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

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

240-
*Function Expression* создаются тогда, когда выполнение доходит до них. Это случится только на строке, помеченной звёздочкой `(*)`. Слишком поздно.
240+
Function Expression создаются тогда, когда выполнение доходит до них. Это случится только на строке, помеченной звёздочкой `(*)`. Слишком поздно.
241241

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

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

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

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

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

@@ -308,7 +308,7 @@ welcome(); // Ошибка: welcome is not defined
308308

309309
Что можно сделать, чтобы `welcome` была видима снаружи `if`?
310310

311-
Верным подходом будет воспользоваться *Function Expression* и присвоить значение `welcome` переменной, объявленной снаружи `if`, что обеспечит нам нужную видимость.
311+
Верным подходом будет воспользоваться Function Expression и присвоить значение `welcome` переменной, объявленной снаружи `if`, что обеспечит нам нужную видимость.
312312

313313
Теперь работает как ожидалось:
314314

@@ -351,18 +351,18 @@ welcome(); // теперь всё в порядке
351351
```
352352

353353

354-
```smart header="Когда использовать *Function Declaration*, а когда *Function Expression*?"
355-
Как правило, если нам понадобилась функция, в первую очередь нужно рассматривать синтаксис *Function Declaration*, который мы использовали до этого. Это даёт нам больше свободы в том, как мы можем организовывать код. Функции, объявленные таким образом можно вызывать до их объявления.
354+
```smart header="Когда использовать Function Declaration, а когда Function Expression?"
355+
Как правило, если нам понадобилась функция, в первую очередь нужно рассматривать синтаксис Function Declaration, который мы использовали до этого. Это даёт нам больше свободы в том, как мы можем организовывать код. Функции, объявленные таким образом можно вызывать до их объявления.
356356
357-
Ещё такие функции `function f(…) {…}`, чуть более заметны в коде, чем `let f = function(…) {…}`. *Function Declaration* более распознаваемы.
357+
Ещё такие функции `function f(…) {…}`, чуть более заметны в коде, чем `let f = function(…) {…}`. Function Declaration более распознаваемы.
358358
359-
...Но если *Function Declaration* нам не подходит по какой-то причине (мы рассмотрели это в примере выше), тогда должно быть использовано *Function Expression*.
359+
...Но если Function Declaration нам не подходит по какой-то причине (мы рассмотрели это в примере выше), тогда должно быть использовано Function Expression.
360360
```
361361

362362

363363
## Функции-стрелки [#arrow-functions]
364364

365-
Существует ещё более простой и краткий синтаксис для создания функций, который часто лучше, чем синтаксис *Function Expression*. Он называется "функции-стрелки" или "стрелочные функции" (arrow functions), т.к. выглядит следующим образом:
365+
Существует ещё более простой и краткий синтаксис для создания функций, который часто лучше, чем синтаксис Function Expression. Он называется "функции-стрелки" или "стрелочные функции" (arrow functions), т.к. выглядит следующим образом:
366366

367367

368368
```js
@@ -417,7 +417,7 @@ let sayHi = () => alert("Hello!");
417417
sayHi();
418418
```
419419

420-
Функции-стрелки могут быть использованы, в качестве *Function Expression*.
420+
Функции-стрелки могут быть использованы, в качестве Function Expression.
421421

422422
Например, вот переписанный пример уже знакомой нам функции `welcome()`:
423423

@@ -463,15 +463,15 @@ alert( sum(1, 2) ); // 3
463463
## Итого
464464

465465
- Функции это значения. Они могут быть присвоены, скопированы или объявлены в другом месте кода.
466-
- Если функция объявлена, как отдельная инструкция в основном потоке кода, то это *Function Declaration*.
467-
- Если функция была создана, как часть выражения, то такая функция называется *Function Expression*.
468-
- *Function Declaration* обрабатываются перед выполненеи блока кода. Они видны во всём блоке.
469-
- *Function Expression* создаются, только когда поток выполнения достигает их.
466+
- Если функция объявлена, как отдельная инструкция в основном потоке кода, то это Function Declaration.
467+
- Если функция была создана, как часть выражения, то такая функция называется Function Expression.
468+
- Function Declaration обрабатываются перед выполненеи блока кода. Они видны во всём блоке.
469+
- Function Expression создаются, только когда поток выполнения достигает их.
470470

471471

472-
В большинстве случаев, когда нам нужно создать фукнцию, предпочтительно использовать *Function Declaration*, т.к. оно видимо до своего объявления в коде. Это позволяет более гибко организовывать код, и улучшает его читаемость.
472+
В большинстве случаев, когда нам нужно создать фукнцию, предпочтительно использовать Function Declaration, т.к. оно видимо до своего объявления в коде. Это позволяет более гибко организовывать код, и улучшает его читаемость.
473473

474-
Таким образом, мы должны прибегать к *Function Expression* в случае, когда *Function Declaration* не подходят для нашей задачи. Мы рассмотрели несколько таких примеров в этой главе, и рассмотрим их ещё больше в будущем.
474+
Таким образом, мы должны прибегать к Function Expression в случае, когда Function Declaration не подходят для нашей задачи. Мы рассмотрели несколько таких примеров в этой главе, и рассмотрим их ещё больше в будущем.
475475

476476
Функции-стрелки очень удобны для однострочных действий. Они бывают двух типов:
477477

0 commit comments

Comments
 (0)