50. Аргументы и параметры функций.

В JavaScript нет передачи аргументов «по значению» и «по ссылке». Всегда идёт передача по значению. Однако помним, что object – это ссылочный тип.

Следствие слабой типизации: часто необходим ручной контроль и (или) приведение типов аргументов.

Если при вызове функции аргументов меньше, чем параметров, то незаданные параметры будут равны undefined. Для параметров, которые не заданы, обычно предусматривают разумные значения по умолчанию.

В JavaScript распространён следующий приём: аргументы функции передаются через свойства объекта. Отчасти это решает проблему с именованными и необязательными параметрами.

Объект, созданный конструктором Arguments, используется для хранения всех аргументов, переданных функции при вызове. Этот объект подобен массиву (не массив, но имеет схожие свойства). В теле любой функции этот объект доступен через идентификатор arguments.

Внимание: в нестрогом режиме изменение arguments ведёт к изменению соответствующих именованных аргументов!

В учебниках и в коде иногда можно встретить упоминание двух свойств объекта Arguments:

  1. callee – ссылается на выполняемую функцию
  2. caller – ссылается на вызвавшую функцию

Объект Arguments: callee и caller

Работа с этими свойствами не приветствуется!

  1. callee не работает в строгом режиме. Вместо него можно и нужно использовать имя функции.
  2. caller не поддерживается современными движками. Обычно пишут arguments.callee.caller (но помним про пункт 1).