Skip to content

Commit 6a06c15

Browse files
committed
funtions.intro fixes
1 parent eb05618 commit 6a06c15

File tree

1 file changed

+8
-13
lines changed

1 file changed

+8
-13
lines changed

doc/ru/function/general.md

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
## Объявление функций и выражения с ними
1+
## Про объявление функций и выражения с ними
22

3-
Функции в JavaScript тоже являются объектами (шок, сенсация). Следовательно, их можно передавать и присваивать точно так же, как и любой другой объект. Одним из вариантов использования такой возможности является передача *анонимной функции* как функции обратного вызова в другую функцию — к примеру, для ассинхронных вызовов.
3+
Функции в JavaScript являются объектами. Следовательно, их можно передавать и присваивать точно так же, как и любой другой объект. Популярным сбособом использования этого свойства является передача *анонимной функции* в качестве функции обратного вызова в некую другую функцию — к примеру, при описании асинхронных вызовов.
44

55
### Объявление `function`
66

77
// всё просто и привычно
88
function foo() {}
99

10-
В следующем примере описанная функция [резервируется](#function.scopes) перед запуском всего скрипта; за счёт этого она доступна *в любом месте* кода, вне зависимости от того где она *определена* — даже если функция вызывается до её фактического объявления в коде.
10+
В следующем примереб ещё перед запуском всего скрипта, для описанной функции [резервируется](#function.scopes) переменная; за счёт этого она доступна *в любом месте* кода, вне зависимости от того, где она *определена* — даже если она вызывается заранее, перед её фактическим объявлением в коде (и сколь угодно задолго до такого определения).
1111

1212

1313
foo(); // сработает, т.к. функция будет создана до выполнения кода
@@ -17,29 +17,24 @@
1717

1818
var foo = function() {};
1919

20-
В этом примере безымянная и *анонимная* функция присваивается переменной `foo`.
20+
В конце этого примера переменной `foo` присваивается безымянная *анонимная* функция.
2121

2222
foo; // 'undefined'
2323
foo(); // вызовет TypeError
2424
var foo = function() {};
2525

26-
Так как в данном примере выражение `var` — это определение функции, переменная с именем `foo` будет заранее зарезервирована перед запуском скрипта (таким образом, `foo` уже будет определена во время его работы).
26+
Поскольку выражение с `var` *резервирует* имя переменной `foo` ещё до запуска кода, `foo` уже имеет некое значение во время его исполнения (отсутствует ошибка «`foo` is not defined»).
2727

28-
Но поскольку присвоения исполняются непосредственно во время работы кода, `foo` по умолчанию будет присвоено значение [`undefined`](#core.undefined) (до обработки строки с определением функции):
29-
30-
var foo; // переменная неявно резервируется
31-
foo; // 'undefined'
32-
foo(); // вызовет TypeError
33-
foo = function() {};
28+
Но поскольку сами *присвоения* исполняются только непосредственно во время работы кода, `foo` по умолчанию будет иметь лишь значение [`undefined`](#core.undefined) (до обработки строки с определением функции).
3429

3530
### Выражения с именованными фунциями
3631

37-
Существует еще ньюанс, касающийся именованных функций создающихся через присваивание:
32+
Существует еще один ньюанс, касающийся присваивания именованных функций:
3833

3934
var foo = function bar() {
4035
bar(); // работает
4136
}
4237
bar(); // получим ReferenceError
4338

44-
Здесь объект `bar` не доступен во внешней области, так как имя `bar` используется только для присвоения переменной `foo`; однако `bar` можно вызвать внутри функции. Такое поведение связано с особенностью работы JavaScript с [пространствами имен](#function.scopes) - имя функции *всегда* доступно в локальной области видимости самой функции.
39+
Здесь фукнция `bar` не доступна во внешней области видимости, так как она используется только для присвоения переменной `foo`; однако, внутри `bar` она неожиданно оказывается доступна. Такое поведение связано с особенностью работы JavaScript с [разыменованием](#function.scopes) - имя функции *всегда* доступно в локальной области видимости самой функции.
4540

0 commit comments

Comments
 (0)