Да, есть: используйте свойство Function.length.
Я только что проверил документы : там, похоже, ничего не упоминается.
trace(foo.length); //0
trace(bar.length); //2
trace(jad.length); //2
Обратите внимание, что после имени функции нет фигурных скобок (). Вам нужна ссылка на объект Function; добавление фигурных скобок выполнит функцию.
Я не знаю, как установить, что один из аргументов является необязательным.
EDIT
А как насчет ... остальных параметров ?
function foo(...rest) {}
function bar(parameter0, parameter1, ...rest) {}
trace(foo.length); //0
trace(bar.length); //2
Это имеет смысл, поскольку нет способа узнать, сколько аргументов будет передано.
Обратите внимание, что в теле функции вы можете точно знать, сколько аргументов было передано, например:
function foo(...rest) {
trace(rest.length);
}
Спасибо @felipemaia за указание на это.