Получить функцию arity
В Javascript, как определить число формальных параметров, определенных для функции?
Обратите внимание, что это не параметр arguments
при вызове функции, а количество именованных аргументов, с которыми была определена функция.
function zero() {
// Should return 0
}
function one(x) {
// Should return 1
}
function two(x, y) {
// Should return 2
}
Ответы
Ответ 1
> zero.length
0
> one.length
1
> two.length
2
Источник
Функция может определять свою собственную arity (length) следующим образом:
// For IE, and ES5 strict mode (named function)
function foo(x, y, z) {
return foo.length; // Will return 3
}
// Otherwise
function bar(x, y) {
return arguments.callee.length; // Will return 2
}
Ответ 2
Функция arity сохраняется в свойстве .length
.
function zero() {
return arguments.callee.length;
}
function one(x) {
return arguments.callee.length;
}
function two(x, y) {
return arguments.callee.length;
}
> console.log("zero="+zero() + " one="+one() + " two="+two())
zero=0 one=1 two=2
Ответ 3
Как описано в других ответах, свойство length
сообщает об этом. Итак, zero.length
будет 0, one.length
будет 1, а two.length
будет 2.
Как и в ES2015, у нас есть две морщины:
- Функции могут иметь параметр "rest" в конце списка параметров, который собирает любые аргументы, заданные в этой позиции или после этого, в настоящий массив (в отличие от псевдо-массива
arguments
)
- Параметры функции могут иметь значения по умолчанию
Параметр "rest" не учитывается при определении арности функции:
function stillOne(a, ...rest) { }
console.log(stillOne.length); // 1
Ответ 4
Арность функции - это количество параметров, которые содержит функция. Ее можно достичь, вызвав свойство length.
Пример:
function add(num1,num2){}
console.log(add.length); // --> 2
function add(num1,num2,num3){}
console.log(add.length); // --> 3
Примечание: количество параметров, переданных в вызове функции, не влияет на функциональность.
Ответ 5
Свойство arity, используемое для возврата числа аргументов, ожидаемых функцией, однако, оно больше не существует и заменено свойством Function.prototype.length.