1 added
1 removed
Original
2026-01-01
Modified
2026-02-26
1
<h2>Транскрипт урока</h2>
1
<h2>Транскрипт урока</h2>
2
<p>В прошлый раз мы упростили вычисление с помощью констант: мы создали константу для pi, и использовали её для вычисления площади поверхности разных планет. Таким образом мы сократили объём кода, но нам всё ещё требовалось множество повторений:</p>
2
<p>В прошлый раз мы упростили вычисление с помощью констант: мы создали константу для pi, и использовали её для вычисления площади поверхности разных планет. Таким образом мы сократили объём кода, но нам всё ещё требовалось множество повторений:</p>
3
<p>Строка кода называется<strong>инструкцией</strong>, в JavaScript инструкции должны заканчиваться точкой с запятой. Тут у нас две инструкции и нам нужно повторять всю формулу в каждой из них. Помните - мы не хотим, чтобы в наших программах что-то повторялось.</p>
3
<p>Строка кода называется<strong>инструкцией</strong>, в JavaScript инструкции должны заканчиваться точкой с запятой. Тут у нас две инструкции и нам нужно повторять всю формулу в каждой из них. Помните - мы не хотим, чтобы в наших программах что-то повторялось.</p>
4
<p>Было бы здорово, если бы у нас была какая-нибудь специфическая машина, которая вычисляет площадь поверхности любой сферы. Чтобы мы могли делать что-то подобное:</p>
4
<p>Было бы здорово, если бы у нас была какая-нибудь специфическая машина, которая вычисляет площадь поверхности любой сферы. Чтобы мы могли делать что-то подобное:</p>
5
<p>Чтобы можно было просто сказать ей: "эй, surfaceAreaCalculator, скажи мне площадь поверхности сферы с радиусом 3390" и она бы сразу давала ответ.</p>
5
<p>Чтобы можно было просто сказать ей: "эй, surfaceAreaCalculator, скажи мне площадь поверхности сферы с радиусом 3390" и она бы сразу давала ответ.</p>
6
<p>Отличные новости! Мы можем создавать подобные машины! Их называют<strong>функциями</strong>, их можно представить в виде чёрных ящиков. Положите что-нибудь внутрь ящика, и она выплюнет что-то другое. В данном случае ящик surfaceAreaCalculator возьмёт одно число - радиус, а выплюнет другое - площадь поверхности.</p>
6
<p>Отличные новости! Мы можем создавать подобные машины! Их называют<strong>функциями</strong>, их можно представить в виде чёрных ящиков. Положите что-нибудь внутрь ящика, и она выплюнет что-то другое. В данном случае ящик surfaceAreaCalculator возьмёт одно число - радиус, а выплюнет другое - площадь поверхности.</p>
7
<p>В этом примере</p>
7
<p>В этом примере</p>
8
<p>мы вызываем ящик surfaceAreaCalculator, даём ему 3390 и получаем ответ. Этот ответ затем сохраняется в константе surfaceOfMars.</p>
8
<p>мы вызываем ящик surfaceAreaCalculator, даём ему 3390 и получаем ответ. Этот ответ затем сохраняется в константе surfaceOfMars.</p>
9
<p>Важно понимать разницу между определением функции и её вызовом. То, что мы только что сделали, называется вызовом - мы<strong>вызвали</strong>функцию surfaceAreaCalculator, другими словами, мы предположили, что она уже существует и использовали её.</p>
9
<p>Важно понимать разницу между определением функции и её вызовом. То, что мы только что сделали, называется вызовом - мы<strong>вызвали</strong>функцию surfaceAreaCalculator, другими словами, мы предположили, что она уже существует и использовали её.</p>
10
<p>Но она должна существовать, так что нужно создать её перед тем, как использовать. Нам нужно<strong>определить</strong>функцию surfaceAreaCalculator. Это определение функции:</p>
10
<p>Но она должна существовать, так что нужно создать её перед тем, как использовать. Нам нужно<strong>определить</strong>функцию surfaceAreaCalculator. Это определение функции:</p>
11
<p>Эта структура со скобками, стрелкой и фигурными скобками определяет функцию. Слово radius в скобках - то, как функция называет число, которое мы передаем в нее. Это<strong>параметр</strong>функции. Эта конкретная функция принимает один<strong>аргумент</strong>, но другие функции могут принимать больше аргументов или вообще не принимать аргументов.</p>
11
<p>Эта структура со скобками, стрелкой и фигурными скобками определяет функцию. Слово radius в скобках - то, как функция называет число, которое мы передаем в нее. Это<strong>параметр</strong>функции. Эта конкретная функция принимает один<strong>аргумент</strong>, но другие функции могут принимать больше аргументов или вообще не принимать аргументов.</p>
12
<p>Фигурные скобки создают<strong>блок</strong>. В JavaScript и других языках вы часто сталкиваетесь с блоками. Они создают группу<strong>инструкций</strong>, таким способом мы понимаем где функция начинается и заканчивается. Эта функция содержит всего одну инструкцию, она начинается с return, а дальше вы видите уже знакомую формулу.</p>
12
<p>Фигурные скобки создают<strong>блок</strong>. В JavaScript и других языках вы часто сталкиваетесь с блоками. Они создают группу<strong>инструкций</strong>, таким способом мы понимаем где функция начинается и заканчивается. Эта функция содержит всего одну инструкцию, она начинается с return, а дальше вы видите уже знакомую формулу.</p>
13
<p>Вы, возможно, уже догадались, что return заставляет ящик выплёвывать результат. Результат вычисления 4 * pi * radius * radius это то, что функция<strong>возвращает</strong>нам после того, как мы её вызываем.</p>
13
<p>Вы, возможно, уже догадались, что return заставляет ящик выплёвывать результат. Результат вычисления 4 * pi * radius * radius это то, что функция<strong>возвращает</strong>нам после того, как мы её вызываем.</p>
14
<p>Теперь нам нужно дать этой функции какое-нибудь название, чтобы по этому названию мы её вызывали. Мне захотелось назвать её surfaceAreaCalculator, но вы можете давать любой функции любое название. Есть определенные правила для названий: например, название не должно содержать пробелы и использовать некоторые специфические слова, как const, но в остальном и функции и константы можно называть почти как захочется.</p>
14
<p>Теперь нам нужно дать этой функции какое-нибудь название, чтобы по этому названию мы её вызывали. Мне захотелось назвать её surfaceAreaCalculator, но вы можете давать любой функции любое название. Есть определенные правила для названий: например, название не должно содержать пробелы и использовать некоторые специфические слова, как const, но в остальном и функции и константы можно называть почти как захочется.</p>
15
<p>Мы уже знаем как давать названия численным константам:</p>
15
<p>Мы уже знаем как давать названия численным константам:</p>
16
<p>С функциями все точно также:</p>
16
<p>С функциями все точно также:</p>
17
<p>const, название, которое вы хотите, знак равенства и сама функция</p>
17
<p>const, название, которое вы хотите, знак равенства и сама функция</p>
18
<p>Давайте теперь соберём всё вместе:</p>
18
<p>Давайте теперь соберём всё вместе:</p>
19
<p>В верхней части - определение функции, а затем вызов функции.</p>
19
<p>В верхней части - определение функции, а затем вызов функции.</p>
20
<p>Давайте заглянем внутрь коробки - что происходит, когда она вызывается с числом 3390 в качестве аргумента. return хочет возвратить результат, но он ещё не готов - в начале нужно произвести вычисление. В вычислении используется аргумент, так что вначале нужно заменить название radius на само значение, которое было передано в функцию при вызове, а затем уже выполнять умножения.</p>
20
<p>Давайте заглянем внутрь коробки - что происходит, когда она вызывается с числом 3390 в качестве аргумента. return хочет возвратить результат, но он ещё не готов - в начале нужно произвести вычисление. В вычислении используется аргумент, так что вначале нужно заменить название radius на само значение, которое было передано в функцию при вызове, а затем уже выполнять умножения.</p>
21
<p>И функция возвращает число 144340776. Можно представить, что происходит снаружи, когда наша функция возвращает значение:</p>
21
<p>И функция возвращает число 144340776. Можно представить, что происходит снаружи, когда наша функция возвращает значение:</p>
22
<p>Теперь surfaceOfMars - это константа с конкретным числовым значением.</p>
22
<p>Теперь surfaceOfMars - это константа с конкретным числовым значением.</p>
23
<p>Давайте посмотрим на другой пример:</p>
23
<p>Давайте посмотрим на другой пример:</p>
24
<p>Эта функция принимает два числа и возвращает процент. Если вы дадите ей 40 и 80, она вернёт 50, потому что 40 это 50% от 80.</p>
24
<p>Эта функция принимает два числа и возвращает процент. Если вы дадите ей 40 и 80, она вернёт 50, потому что 40 это 50% от 80.</p>
25
<p>Как вы видите, когда есть несколько параметров, они разделяются запятыми.</p>
25
<p>Как вы видите, когда есть несколько параметров, они разделяются запятыми.</p>
26
<p>Давайте выведем результат на экран:</p>
26
<p>Давайте выведем результат на экран:</p>
27
<p>Сегодня 16 декабря, и я хочу узнать, какой процент этого месяца уже прошёл. Посмотрите на код. Вначале мы напечатали строку с вопросом, а потом напечатали то, что возвращает функция percentageCalculator().</p>
27
<p>Сегодня 16 декабря, и я хочу узнать, какой процент этого месяца уже прошёл. Посмотрите на код. Вначале мы напечатали строку с вопросом, а потом напечатали то, что возвращает функция percentageCalculator().</p>
28
<p>Важный момент: вызов функции может быть аргументом для других функций! Как работает функция console.log()? Она принимает аргумент и выводит его на экран. Мы использовали вызов функции percentageCalculator() КАК АРГУМЕНТ и это сработало. Почему? Потому что вначале вызывается наша функция percentageCalculator(), она возвращает результат. Затем с этим результатом как аргументом вызывается функция console.log(). В итоге результат работы percentageCalculator() выводится на экран.</p>
28
<p>Важный момент: вызов функции может быть аргументом для других функций! Как работает функция console.log()? Она принимает аргумент и выводит его на экран. Мы использовали вызов функции percentageCalculator() КАК АРГУМЕНТ и это сработало. Почему? Потому что вначале вызывается наша функция percentageCalculator(), она возвращает результат. Затем с этим результатом как аргументом вызывается функция console.log(). В итоге результат работы percentageCalculator() выводится на экран.</p>
29
<p>Ок, я свою часть закончил. Теперь ваша очередь писать функции.</p>
29
<p>Ок, я свою часть закончил. Теперь ваша очередь писать функции.</p>
30
<h2>Дополнение к уроку</h2>
30
<h2>Дополнение к уроку</h2>
31
<h3>Способы записи функций</h3>
31
<h3>Способы записи функций</h3>
32
<p>Кроме указанного в видео определения функции:</p>
32
<p>Кроме указанного в видео определения функции:</p>
33
<p>Существует несколько других. Например, если у вас функция-однострочник, то можно использовать сокращенный синтаксис:</p>
33
<p>Существует несколько других. Например, если у вас функция-однострочник, то можно использовать сокращенный синтаксис:</p>
34
<p>Отличия от полного определения два: пропали фигурные скобки и инструкция return. Сокращенная запись функции делает возврат автоматически. Подразумевается, что внутри такой функции ровно одно выражение, которое вычисляется, и его результат сразу возвращается наружу.</p>
34
<p>Отличия от полного определения два: пропали фигурные скобки и инструкция return. Сокращенная запись функции делает возврат автоматически. Подразумевается, что внутри такой функции ровно одно выражение, которое вычисляется, и его результат сразу возвращается наружу.</p>
35
<p>Пример с двумя аргументами:</p>
35
<p>Пример с двумя аргументами:</p>
36
<p>Так же можно определять функции, используя ключевое слово function:</p>
36
<p>Так же можно определять функции, используя ключевое слово function:</p>
37
<p>или</p>
37
<p>или</p>
38
<p>Мы изучаем новый стандарт ES7 и используем стрелочные функции. Поэтому в наших курсах мы будем придерживаться такой () => {} формы записи по многим причинам. Во-первых, она лаконичнее, во-вторых, обладает одним важным свойством, которое будет изучено позже, ну а в-третьих, такой способ записи визуально стирает грань между функциями и данными, что очень пригодится нам в будущем.</p>
38
<p>Мы изучаем новый стандарт ES7 и используем стрелочные функции. Поэтому в наших курсах мы будем придерживаться такой () => {} формы записи по многим причинам. Во-первых, она лаконичнее, во-вторых, обладает одним важным свойством, которое будет изучено позже, ну а в-третьих, такой способ записи визуально стирает грань между функциями и данными, что очень пригодится нам в будущем.</p>
39
<p>Некоторые особенности такой формы записи вместо function выходят за рамки базовых курсов, вы о них узнаете в будущем. Если любопытно, то можете почитать статьи по запросу "стрелочные функции es6", например<a>https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions</a>или<a>https://habr.com/company/mailru/blog/213455/</a>.</p>
39
<p>Некоторые особенности такой формы записи вместо function выходят за рамки базовых курсов, вы о них узнаете в будущем. Если любопытно, то можете почитать статьи по запросу "стрелочные функции es6", например<a>https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions</a>или<a>https://habr.com/company/mailru/blog/213455/</a>.</p>
40
<h3>Формальные и фактические параметры функции</h3>
40
<h3>Формальные и фактические параметры функции</h3>
41
<p><strong>Формальными параметрами</strong>(или просто<strong>параметрами</strong>) функции называются имена переменных в<em>определении функции</em>. Например у функции const f = (a, b) => a - b; формальные параметры - это a и b.</p>
41
<p><strong>Формальными параметрами</strong>(или просто<strong>параметрами</strong>) функции называются имена переменных в<em>определении функции</em>. Например у функции const f = (a, b) => a - b; формальные параметры - это a и b.</p>
42
-
<p><strong>Фактические парамет��ы</strong>- это то, что было<em>передано в функцию</em>в момент вызова. Например если предыдущую функцию вызвать так f(5, z), где const z = 8, то фактическими параметрами являются 5 и z. Результатом этого вызова будет число -3, а внутри функции на момент конкретного вызова параметр a становится равным 5, а b становится равным 8. Фактические параметры еще называют<strong>аргументами</strong>функции.</p>
42
+
<p><strong>Фактические параметры</strong>- это то, что было<em>передано в функцию</em>в момент вызова. Например если предыдущую функцию вызвать так f(5, z), где const z = 8, то фактическими параметрами являются 5 и z. Результатом этого вызова будет число -3, а внутри функции на момент конкретного вызова параметр a становится равным 5, а b становится равным 8. Фактические параметры еще называют<strong>аргументами</strong>функции.</p>
43
<p>Как видите, нет никакой связи между именами формальных и фактических параметров. Более того, у фактических параметров вообще может не быть имен, как в примере выше, где мы сразу передали число 3 в функцию. Что имеет значение, так это<strong>позиция</strong>. Во время вызова функции параметры должны передаваться в правильном порядке, и только тогда функция отработает, как предполагается.</p>
43
<p>Как видите, нет никакой связи между именами формальных и фактических параметров. Более того, у фактических параметров вообще может не быть имен, как в примере выше, где мы сразу передали число 3 в функцию. Что имеет значение, так это<strong>позиция</strong>. Во время вызова функции параметры должны передаваться в правильном порядке, и только тогда функция отработает, как предполагается.</p>
44
<h3>Return</h3>
44
<h3>Return</h3>
45
<p>Вызов оператора return приводит к изменению течения программы. Последующие инструкции никогда не будут выполнены:</p>
45
<p>Вызов оператора return приводит к изменению течения программы. Последующие инструкции никогда не будут выполнены:</p>
46
<h2>Выводы</h2>
46
<h2>Выводы</h2>
47
<ul><li>Функции подобны специальным машинам, которые мы создаём, чтобы они выполняли что-нибудь для нас.</li>
47
<ul><li>Функции подобны специальным машинам, которые мы создаём, чтобы они выполняли что-нибудь для нас.</li>
48
<li>Функции можно представить в виде ящиков, которые<strong>принимают что-то</strong>и<strong>что-то выплёвывают</strong>.<ul><li>Функции могут принимать<strong>аргументы</strong>.</li>
48
<li>Функции можно представить в виде ящиков, которые<strong>принимают что-то</strong>и<strong>что-то выплёвывают</strong>.<ul><li>Функции могут принимать<strong>аргументы</strong>.</li>
49
<li>И могут<strong>возвращать</strong>что-то.</li>
49
<li>И могут<strong>возвращать</strong>что-то.</li>
50
</ul></li>
50
</ul></li>
51
</ul><p>Вот пример определения и вызова функции:</p>
51
</ul><p>Вот пример определения и вызова функции:</p>
52
<p>Здесь radius - это параметр функции surfaceAreaCalculator.</p>
52
<p>Здесь radius - это параметр функции surfaceAreaCalculator.</p>
53
<p>Вы можете вызывать функцию и вкладывать вызов другой функции в качестве аргумента:</p>
53
<p>Вы можете вызывать функцию и вкладывать вызов другой функции в качестве аргумента:</p>
54
54