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
+61-61Lines changed: 61 additions & 61 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -237,7 +237,7 @@ let sayHi = function(name) { // (*) магии больше нет
237
237
};
238
238
```
239
239
240
-
Функциональные выражения создаются тогда, когда выполнение доходит до них. Это случится только на строке, помеченной звёздочкой `(*)`. Слишком поздно.
240
+
Функциональные Выражения создаются тогда, когда выполнение доходит до них. Это случится только на строке, помеченной звёздочкой `(*)`. Слишком поздно.
241
241
242
242
**Когда Объявление Функции создаётся для блока кода, оно становится доступно везде внутри блока. Но не снаружи него.**
243
243
@@ -248,19 +248,19 @@ let sayHi = function(name) { // (*) магии больше нет
248
248
Код, написанный подобным образом, работать не будет:
249
249
250
250
```js run
251
-
let age = prompt("What is your age?", 18);
251
+
let age = prompt("Сколько Вам лет?", 18);
252
252
253
253
// в зависимости от условия объявляем функцию
254
254
if (age < 18) {
255
255
256
256
function welcome() {
257
-
alert("Hello!");
257
+
alert("Привет!");
258
258
}
259
259
260
260
} else {
261
261
262
262
function welcome() {
263
-
alert("Greetings!");
263
+
alert("Здравствуйте!");
264
264
}
265
265
266
266
}
@@ -271,7 +271,7 @@ welcome(); // Ошибка: welcome is not defined
271
271
*/!*
272
272
```
273
273
274
-
Это произошло, так как Объявление Функции видимо только внутри блока кода в котором располагается.
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!"); // | Объявление Функции доступно
287
+
alert("Привет!"); // | Объявление Функции доступно
288
288
} // | во всём блоке кода, в котором объявлено
289
289
// |
290
290
*!*
@@ -294,7 +294,7 @@ if (age < 18) {
294
294
} else {
295
295
296
296
function welcome() { // для age = 16, эта функция "welcome" никогда не создастся
297
-
alert("Greetings!");
297
+
alert("Здравствуйте!");
298
298
}
299
299
}
300
300
@@ -306,87 +306,87 @@ welcome(); // Ошибка: welcome is not defined
306
306
*/!*
307
307
```
308
308
309
-
What can we do to make `welcome`visible outside of`if`?
309
+
Что можно сделать, чтобы `welcome`была видима снаружи`if`?
310
310
311
-
The correct approach would be to use a Function Expression and assign `welcome`to the variable that is declared outside of`if` and has the proper visibility.
311
+
Верным подходом будет воспользоваться Функциональным Выражением и присвоить значение `welcome`переменной, объявленной снаружи `if`, что обеспечит нам нужную видимость.
312
312
313
-
Now it works as intended:
313
+
Теперь работает как надо:
314
314
315
315
```js run
316
-
let age = prompt("What is your age?", 18);
316
+
let age = prompt("Сколько Вам лет?", 18);
317
317
318
318
let welcome;
319
319
320
320
if (age < 18) {
321
321
322
322
welcome = function() {
323
-
alert("Hello!");
323
+
alert("Привет!");
324
324
};
325
325
326
326
} else {
327
327
328
328
welcome = function() {
329
-
alert("Greetings!");
329
+
alert("Здравствуйте!");
330
330
};
331
331
332
332
}
333
333
334
334
*!*
335
-
welcome(); // ok now
335
+
welcome(); // теперь всё в порядке
336
336
*/!*
337
337
```
338
338
339
-
Or we could simplify it even further using a question mark operator`?`:
339
+
Можно упростить этот код ещё сильнее, используя оператор вопросительного знака`?`:
340
340
341
341
```js run
342
-
let age = prompt("What is your age?", 18);
342
+
let age = prompt("Сколько Вам лет?", 18);
343
343
344
344
let welcome = (age < 18) ?
345
-
function() { alert("Hello!"); } :
346
-
function() { alert("Greetings!"); };
345
+
function() { alert("Привет!"); } :
346
+
function() { alert("Здравствуйте!"); };
347
347
348
348
*!*
349
-
welcome(); // ok now
349
+
welcome(); // теперь всё в порядке
350
350
*/!*
351
351
```
352
352
353
353
354
-
```smart header="When should you choose Function Declaration versus Function Expression?"
355
-
As a rule of thumb, when we need to declare a function, the first to consider is Function Declaration syntax, the one we used before. It gives more freedom in how to organize our code, because we can call such functions before they are declared.
354
+
```smart header="Когда использовать Объявление Функции, а когда Функциональное Выражение?"
355
+
Как правило, если нам понадобилась функция в первую очередь нужно рассматривать синтаксис Объявления Функции, который мы использовали до этого. Это даёт нам больше свободы в том, как мы можем организовывать код. Функции, объявленные таким образом можно вызывать до их объявления.
356
356
357
-
It's also a little bit easier to look up `functionf(…) {…}` in the code than `letf=function(…) {…}`. Function Declarations are more "eye-catching".
357
+
Ещё такие функции `functionf(…) {…}`, чуть более заметны в коде, чем `letf=function(…) {…}`. Объявления функций более распознаваемы.
358
358
359
-
...But if a Function Declaration does not suit us for some reason (we've seen an example above), then Function Expression should be used.
359
+
...Но если Объявление Функции нам не подходит по какой-то причине (мы рассмотрели это в примере выше), тогда должно быть использовано Функциональное Выражение.
360
360
```
361
361
362
362
363
-
## Arrow functions [#arrow-functions]
363
+
## Функции-стрелки [#arrow-functions]
364
364
365
-
There's one more very simple and concise syntax for creating functions, that's often better than FunctionExpressions. It's called "arrow functions", because it looks like this:
365
+
Существует ещё более простой и краткий синтаксис для создания функций, который часто лучше, чем синтаксис Функциональных Выражений. Он называется "функции-стрелки" или "стрелочные функции" (arrow functions), т.к. выглядит следующим образом:
366
366
367
367
368
368
```js
369
369
let func = (arg1, arg2, ...argN) => expression
370
370
```
371
371
372
-
...This creates a function `func` that has arguments `arg1..argN`, evaluates the `expression` on the right side with their use and returns its result.
372
+
...Такой код создаёт функцию`func`с аргументами `arg1..argN` и вычисляет`expression`с правой стороны с их использованием, сразу возвращая результат.
373
373
374
-
In other words, it's roughly the same as:
374
+
Другими словами, это почти так же как:
375
375
376
376
```js
377
377
let func = function(arg1, arg2, ...argN) {
378
378
return expression;
379
379
};
380
380
```
381
381
382
-
...But much more concise.
382
+
...Но гораздо более кратко.
383
383
384
-
Let's see an example:
384
+
Давайте взглянем на пример:
385
385
386
386
```js run
387
387
let sum = (a, b) => a + b;
388
388
389
-
/* The arrow function is a shorter form of:
389
+
/* Функция-стрелка более краткая форма:
390
390
391
391
let sum = function(a, b) {
392
392
return a + b;
@@ -397,10 +397,10 @@ alert( sum(1, 2) ); // 3
397
397
398
398
```
399
399
400
-
If we have only one argument, then parentheses can be omitted, making that even shorter:
400
+
Если у нас только один аргумент, то круглые скобки можно опустить, сделав запись ещё короче:
401
401
402
402
```js run
403
-
// same as
403
+
// тоже что и
404
404
// let double = function(n) { return n * 2 }
405
405
*!*
406
406
let double = n => n * 2;
@@ -409,71 +409,71 @@ let double = n => n * 2;
409
409
alert( double(3) ); // 6
410
410
```
411
411
412
-
If there are no arguments, parentheses should be empty (but they should be present):
412
+
Если нет аргументов, исользуются пустые круглые скобки (их указывать обязательно):
413
413
414
414
```js run
415
415
let sayHi = () => alert("Hello!");
416
416
417
417
sayHi();
418
418
```
419
419
420
-
Arrow functions can be used in the same way as Function Expressions.
420
+
Функции-стрелки могут быть использован, в качестве Функциональныех Выражений.
421
421
422
-
For instance, here's the rewritten example with`welcome()`:
422
+
Например, вот переписанный пример уже знакомой нам функции`welcome()`:
423
423
424
424
```js run
425
-
let age = prompt("What is your age?", 18);
425
+
let age = prompt("Сколько Вам лет?", 18);
426
426
427
427
let welcome = (age < 18) ?
428
-
() => alert('Hello') :
429
-
() => alert("Greetings!");
428
+
() => alert('Привет') :
429
+
() => alert("Здравствуйте!");
430
430
431
-
welcome(); // ok now
431
+
welcome(); // теперь всё в порядке
432
432
```
433
433
434
-
Arrow functions may appear unfamiliar and not very readable at first, but that quickly changes as the eyes get used to the structure.
434
+
По началу Функции-стрелки могут позакаться необычными и трудно-читаемыми, но это быстро пройдёт, как только глаза привыкнут к этим конструкциям.
435
435
436
-
They are very convenient for simple one-line actions, when we're just too lazy to write many words.
436
+
Они очень удобны для простых однострочных действий, когда бывает утомительно писать много слов.
The examples above took arguments from the left of `=>` and evaluated the right-side expression with them.
440
+
В примерах выше аргументы использовались слева от `=>`, а справа вычислялось выражение с ними.
441
441
442
-
Sometimes we need something a little bit more complex, like multiple expressions or statements. It is also possible, but we should enclose them in curly braces. Then use a normal `return` within them.
442
+
Иногда нам нужно кое-что более сложное, например, несколько выражений или инструкций. Это также возможно, но мы должны заключать такие выражения в фигурные скобки с использованием директивы`return`внутри них, как в обычной функции.
443
443
444
-
Like this:
444
+
Например:
445
445
446
446
```js run
447
-
let sum = (a, b) => { // the curly brace opens a multiline function
447
+
letsum= (a, b) => { //фигурная скобка, открывающая тело многострочной функции
448
448
let result = a + b;
449
449
*!*
450
-
return result; // if we use curly braces, use return to get results
450
+
return result; //если используются фигурные скобки, должна использоваться `return`, чтобы вернуть результат
451
451
*/!*
452
452
};
453
453
454
454
alert( sum(1, 2) ); // 3
455
455
```
456
456
457
-
```smart header="More to come"
458
-
Here we praised arrow functions for brevity. But that's not all! Arrow functions have other interesting features. We'll return to them later in the chapter <info:arrow-functions>.
457
+
```smart header="Кое-что ещё"
458
+
Здесь мы рассмотрели Функции-стрелки, с позиции их более краткой записи. Но это далеко не всё! Стрелочные функциио обладают другими интересными особенностями. Мы вернёмся к ним позже в главе <info:arrow-functions>.
459
459
460
-
For now, we can already use them for one-line actions and callbacks.
460
+
А пока, мы можем использовать их для простых однострочных действий и колбэков.
461
461
```
462
462
463
-
## Summary
463
+
## Итого
464
464
465
-
- Functions are values. They can be assigned, copied or declared in any place of the code.
466
-
- If the function is declared as a separate statement in the main code flow, that's called a "Function Declaration".
467
-
-If the function is created as a part of an expression, it's called a "Function Expression".
468
-
- Function Declarations are processed before the code block is executed. They are visible everywhere in the block.
469
-
- Function Expressions are created when the execution flow reaches them.
465
+
-Функции это значения. Они могут быть присвоены, скопированы или объявлены в другом месте кода.
466
+
-Если функция объявлена, как отдельная инструкция в основном потоке кода, то это "Объявление Функции".
467
+
-Если функция была создана, как часть выражения, такая функция называется "Функциональным Выражением".
468
+
-Объявления Функций обрабатываются перед выполненеи блока кода. Они видны во всём блоке.
469
+
-Функциональные Выражения создаются, только когда поток выполнения достигает их.
470
470
471
471
472
-
In most cases when we need to declare a function, a Function Declaration is preferable, because it is visible prior to the declaration itself. That gives us more flexibility in code organization, and is usually more readable.
472
+
В большинстве случаев, когда нам нужно создать фукнцию, предпочтительно использовать Объявление Функции, т.к. оно видимо до своего объявления в коде. Это позволяет более гибко организовывать код, и обычно улучшает его читаемость.
473
473
474
-
So we should use a Function Expression only when a Function Declaration is not fit for the task. We've seen a couple of examples of that in this chapter, and will see more in the future.
474
+
Таким образом, мы должны прибегать к Функциональным Выражениям в случае, когда Объявления Функций не подходят для нашей задачи. Мы рассмотрели несколько таких примеров в этой главе, и рассмотрим их ещё больше в будущем.
475
475
476
-
Arrow functions are handy for one-liners. They come in two flavors:
476
+
Стрелочные функции очень удобны для однострочных действий. Они бывают двух типов:
477
477
478
-
1. Without curly braces: `(...args) => expression` -- the right side is an expression: the function evaluates it and returns the result.
479
-
2. With curly braces: `(...args) => { body }` -- brackets allow us to write multiple statements inside the function, but we need an explicit `return` to return something.
478
+
1.Без фигурных скобок: `(...args) => expression` -- правая сторона выражение: функция выполняет его и возвращает результат.
479
+
2.С фигурными скобками: `(...args) => { body }` -- скобки позволяют нам писать многосточные инструкции внутри функции, но при этом необходимо указывать директиву `return`, чтобы вернуть какое либо значение.
0 commit comments