На этом шаге мы рассмотрим правила передачи аргументов в функцию и рекурсивные функции.
В JavaScript действуют следующие правила передачи аргументов функции:
Важной особенностью языка JavaScript является то, что функция может вызывать не только другие функции, но и сама себя. Такие функции называются рекурсивными. Во многих случаях использование рекурсии позволяет писать краткий код вместо сложных вложенных циклов. Следует, однако, учитывать, что рекурсия работает медленнее, чем обычный цикл, и пользоваться ей только в тех случаях, когда это действительно оправдано.
Приведем пример функции, вычисляющей факториал числа (факториал числа n равен 1 * 2 * ... * n):
<HTML> <HEAD> <TITLE>Рекурсивные функции</TITLE> <SCRIPT LANGUAGE="JavaScript"> <!-- function factorial (n) { return (n<=1)?1:n * factorial(n-1); } var x = 5; var y = factorial (x); alert ("Факториал числа "+x+" равен "+y); //--> </SCRIPT> </HEAD> <BODY> </BODY> </HTML>
Результат работы скрипта приведен на рисунке 1.
Рис.1. Использование рекурсивной функции
Неаккуратно написанная рекурсивная функция может войти в бесконечный цикл и никогда не вернуть результата. Поэтому при использовании рекурсии всегда нужно предусмотреть точку выхода из рекурсии. Такой точкой выхода является здесь проверка условия n<=1. Как только это условие будет выполнено, функция вернет значение 1, а до этого момента значение функции будет равно n*factorial(n-1):
5 * factorial (4);
5 * 4 * factorial (3);
5 * 4 * 3 * factorial (2);
. . . . .
5 * 4 * 3 * 2 * 1. //"Сработало" условие выхода.
На следующем шаге мы рассмотрим вопросы, связанные с областью видимости переменных.