При вызове функции формальным параметрам присваиваются значения фактических. Несовпадение типов формальных и фактических параметров приводит к ошибке.
Теоретически объявлять функцию можно в любом месте в пределах раздела <script>.Существует единственное ограничение — нельзя объявлять функцию в пределах другой функции или управляющей структуры. Однако, одни блоки HTML-документа загружаются раньше других, равно как и любые сценарии, встроенные в эти HTML-блоки. В этой связи рекомендуется объявлять функции HTML-документа в разделе <head>.Объявление всех функций в этом разделе гарантирует, что функции будут доступны, если какому-то сценарию потребуется вызвать их немедленно.
Передача параметров в функцию бывает двух типов - по значению и по ссылке.
Передача значений фактических параметров выполняется по значению, если передаются данные простых типов. В этом случае функция использует копию переменных, а не оригинал.
Если в функцию передаются объекты, передача производится по ссылке. В этом случае функция меняет значение объекта.
Если нужно передать по ссылке в функцию данные простых типов, то их нужно поместить внутрь объекта.
При использовании функций нельзя:
- писать ключевое слово var в списке параметров функции;
- забывать вернуть значение функции;
- ставить знак ; после закрывающей скобки в списке параметров;
- определять локальную переменную, имя которой совпадает с параметром функции;
- передавать фактические параметры, тип которых несовместим с формальными.
Не рекомендуется использовать одинаковые имена для формальных и для фактических параметров.
Обычно сценарии составляют в виде набора небольших функций с небольшими наборами параметров.
Функции допускают рекурсию с неограниченной глубиной вызова, те любая функция может вызывать сама себя. При каждом вызове для параметров и локальных переменных берется новая память, так, что их значения из предыдущих незавершенных вызовов не перезаписываются
Рассмотрим классический пример вычисления факториала числа.