50. Аргументы и параметры функций.
В JavaScript нет передачи аргументов «по значению» и «по ссылке». Всегда идёт передача по значению. Однако помним, что object
– это ссылочный тип.
Следствие слабой типизации: часто необходим ручной контроль и (или) приведение типов аргументов.
Если при вызове функции аргументов меньше, чем параметров, то незаданные параметры будут равны undefined
. Для параметров, которые не заданы, обычно предусматривают разумные значения по умолчанию.
В JavaScript распространён следующий приём: аргументы функции передаются через свойства объекта. Отчасти это решает проблему с именованными и необязательными параметрами.
Объект, созданный конструктором Arguments
, используется для хранения всех аргументов, переданных функции при вызове. Этот объект подобен массиву (не массив, но имеет схожие свойства). В теле любой функции этот объект доступен через идентификатор arguments.
Внимание: в нестрогом режиме изменение arguments ведёт к изменению соответствующих именованных аргументов!
В учебниках и в коде иногда можно встретить упоминание двух свойств объекта Arguments:
callee
– ссылается на выполняемую функциюcaller
– ссылается на вызвавшую функцию
Объект Arguments: callee и caller
Работа с этими свойствами не приветствуется!
callee
не работает в строгом режиме. Вместо него можно и нужно использовать имя функции.caller
не поддерживается современными движками. Обычно пишутarguments.callee.caller
(но помним про пункт 1).