|
1 | 1 |
|
2 | | -# Функциональный объект, NFE |
| 2 | +# Объект функции, NFE |
3 | 3 |
|
4 | 4 | Как мы уже знаем, в JavaScript функции -- это значения. |
5 | 5 |
|
6 | 6 | Каждое значение в JavaScript имеет свой тип. А функция -- это какой тип? |
7 | 7 |
|
8 | 8 | В JavaScript, функции -- это объекты. |
9 | 9 |
|
10 | | -Удобно представить себе функции как вызываемые "объекты-действия". Мы можем их не только вызывать, но и рассматривать их как объекты: добавлять/удалять свойства, передавать их по ссылке и т.д. |
| 10 | +Можно представить функцию как "объект, который может делать какое-то действие". Функции можно не только вызывать, но использовать их как обычные объекты: добавлять/удалять свойства, передавать их по ссылке и т.д. |
11 | 11 |
|
12 | 12 |
|
13 | 13 | ## Свойство "name" |
@@ -340,13 +340,13 @@ welcome(); // Hello, Guest (вложенный вызов работает) |
340 | 340 |
|
341 | 341 | Их свойства: |
342 | 342 |
|
343 | | -- `name` -- имя функции. Устанавливается при декларативном объявлении функции, и может быть установлено как значение свойства объекта. |
344 | | -- `length` -- количество аргументов в объявлении функции. Оставшиеся параметры не считаются. |
| 343 | +- `name` -- имя функции. Обычно берётся из объявления функции, но если там нет - JavaScript пытается понять его из контекста. |
| 344 | +- `length` -- количество аргументов в объявлении функции. Троеточие ("остальные параметры") не считается. |
345 | 345 |
|
346 | 346 | Если функция объявлена как Function Expression (вне основного потока кода), и имеет имя, тогда это называется Именованным Функциональным Выражением. Это имя может быть использовано для ссылки на себя же, для рекурсивных вызовов и т.п. |
347 | 347 |
|
348 | | -Также, функции могут содержать дополнительные свойства. Многие широко известные JavaScript библиотеки искусно используют эту возможность. |
| 348 | +Также функции могут содержать дополнительные свойства. Многие известные JavaScript-библиотеки искусно используют эту возможность. |
349 | 349 |
|
350 | | -Они создают "основную" функцию и добавляют множество "вспомогательных" функций внутрь первой. Например, библиотека [jquery](https://jquery.com) создаёт функцию с именем `$`. Библиотека [lodash](https://lodash.com) создаёт функцию `_`, а потом добавляет в неё `_.clone`, `_.keyBy` и другие свойства (чтобы узнать о ней побольше см. [документацию](https://lodash.com/docs)). На самом деле, они делают это, чтобы уменьшить засорение глобального пространства имен, таким образом одна библиотека предоставляет только одну глобальную переменную, что уменьшает вероятность конфликта имен. |
| 350 | +Они создают "основную" функцию и добавляют множество "вспомогательных" функций внутрь первой. Например, библиотека [jquery](https://jquery.com) создаёт функцию с именем `$`. Библиотека [lodash](https://lodash.com) создаёт функцию `_`, а потом добавляет в неё `_.clone`, `_.keyBy` и другие свойства (чтобы узнать о ней побольше см. [документацию](https://lodash.com/docs)). Они делают это, чтобы уменьшить засорение глобального пространства имен, таким образом одна библиотека предоставляет только одну глобальную переменную, уменьшая вероятность конфликта имен. |
351 | 351 |
|
352 | | -Таким образом, функция сама по себе может выполнять полезную работу, а также содержать множество других функций в своих свойствах. |
| 352 | +Таким образом, функция может не только делать что-то сама по себе, но также и предоставлять полезный функционал через свои свойства. |
0 commit comments