HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>В языках программирования существует понятие "объекты первого рода (или класса)". Им обозначают элементы, которые могут быть переданы в функции, возвращены из функций и присвоены переменным (или константам). К таким элементам относятся любые<em>данные</em>, например числа, строки, массивы или логические значения.</p>
1 <p>В языках программирования существует понятие "объекты первого рода (или класса)". Им обозначают элементы, которые могут быть переданы в функции, возвращены из функций и присвоены переменным (или константам). К таким элементам относятся любые<em>данные</em>, например числа, строки, массивы или логические значения.</p>
2 <p>Объектами первого рода может быть не только то, что мы привыкли именовать словом "данные", но и любая конструкция языка, например, функции. В JavaScript функции это объекты первого рода. Такая особенность очень серьезно влияет не только на обращение с функциями, но и на общий стиль программирования. Ниже мы поговорим об обращении с функциями как с данными.</p>
2 <p>Объектами первого рода может быть не только то, что мы привыкли именовать словом "данные", но и любая конструкция языка, например, функции. В JavaScript функции это объекты первого рода. Такая особенность очень серьезно влияет не только на обращение с функциями, но и на общий стиль программирования. Ниже мы поговорим об обращении с функциями как с данными.</p>
3 <h2>Сохранение в константе</h2>
3 <h2>Сохранение в константе</h2>
4 <p>В этом коде больше действий чем мы привыкли думать:</p>
4 <p>В этом коде больше действий чем мы привыкли думать:</p>
5 <ol><li>Создание (определение) функции: () =&gt; console.log('I love Hexlet')</li>
5 <ol><li>Создание (определение) функции: () =&gt; console.log('I love Hexlet')</li>
6 <li>Создание константы x и сохранение в ней значения в виде функции: const x =</li>
6 <li>Создание константы x и сохранение в ней значения в виде функции: const x =</li>
7 </ol><p>Этот момент нужно хорошо прочувствовать. Минимальное определение функции, которое только возможно, выглядит так: () =&gt; {}. Это пустая функция с пустым телом, которая не делает ничего. Присваивать её константе или нет - вопрос отдельный.</p>
7 </ol><p>Этот момент нужно хорошо прочувствовать. Минимальное определение функции, которое только возможно, выглядит так: () =&gt; {}. Это пустая функция с пустым телом, которая не делает ничего. Присваивать её константе или нет - вопрос отдельный.</p>
8 <p>Даже сохранив функцию внутри константы, ничего не мешает передать ее в другую константу. Только не забывайте об объектной природе функции. В другую константу передается не сама функция, а ссылка на нее:</p>
8 <p>Даже сохранив функцию внутри константы, ничего не мешает передать ее в другую константу. Только не забывайте об объектной природе функции. В другую константу передается не сама функция, а ссылка на нее:</p>
9 <p>Более того, любую функцию можно использовать напрямую, без сохранения в константе:</p>
9 <p>Более того, любую функцию можно использовать напрямую, без сохранения в константе:</p>
10 <p>В примере мы сделали вызов функции, что называется, "на лету": сначала создали (() =&gt; console.log('I love Hexlet')) и сразу же сделали вызов с помощью<em>оператора вызова функции</em>(). При этом определение функции следует обернуть в круглые скобки, чтобы обозначить границы определения для интерпретатора, которому нужно "понимать", что конкретно вы хотите вызвать. Понятно, что после такого выражения доступ к функции будет утерян, потому что она нигде не была сохранена.</p>
10 <p>В примере мы сделали вызов функции, что называется, "на лету": сначала создали (() =&gt; console.log('I love Hexlet')) и сразу же сделали вызов с помощью<em>оператора вызова функции</em>(). При этом определение функции следует обернуть в круглые скобки, чтобы обозначить границы определения для интерпретатора, которому нужно "понимать", что конкретно вы хотите вызвать. Понятно, что после такого выражения доступ к функции будет утерян, потому что она нигде не была сохранена.</p>
11 <p>Имя константы - это лишь её имя, а сама функция не имеет имени. Поэтому такие функции в программировании принято называть "анонимными". В других языках анонимные функции нередко называют лямбда-функциями. В JavaScript их иногда зовут так же.</p>
11 <p>Имя константы - это лишь её имя, а сама функция не имеет имени. Поэтому такие функции в программировании принято называть "анонимными". В других языках анонимные функции нередко называют лямбда-функциями. В JavaScript их иногда зовут так же.</p>
12 <h2>Создание внутри другой функции</h2>
12 <h2>Создание внутри другой функции</h2>
13 <p>Раз анонимная функция - выражение, мы можем определять её в любом месте программы, допускающем использование выражений, например, в теле другой функции!</p>
13 <p>Раз анонимная функция - выражение, мы можем определять её в любом месте программы, допускающем использование выражений, например, в теле другой функции!</p>
14 <p>Из того факта, что определение функции является обыкновенным выражением, следует, что её можно передавать в другие функции в качестве аргументов и возвращать из других функций, как значения. Подробнее поговорим об этом, когда будем изучать<em>функции высшего порядка</em>.</p>
14 <p>Из того факта, что определение функции является обыкновенным выражением, следует, что её можно передавать в другие функции в качестве аргументов и возвращать из других функций, как значения. Подробнее поговорим об этом, когда будем изучать<em>функции высшего порядка</em>.</p>
15 <p>Использование анонимных функций значительно повышает выразительные возможности языка, и в этом вы скоро убедитесь. В JavaScript анонимные функции составляют костяк любой программы. Функции, создающие функции, возвращающие функции и принимающие функции как аргументы - основной способ разрабатывать в JavaScript.</p>
15 <p>Использование анонимных функций значительно повышает выразительные возможности языка, и в этом вы скоро убедитесь. В JavaScript анонимные функции составляют костяк любой программы. Функции, создающие функции, возвращающие функции и принимающие функции как аргументы - основной способ разрабатывать в JavaScript.</p>