length у функции в JavaScript

length у функции показывает количество параметров, которые указаны в объявлении функции.

function sum(a, b) {
  return a + b;
}

console.log(sum.length);

Результат:

2

У функции sum() два параметра: a и b. Поэтому sum.length вернул 2.

Что такое length у функции

Функция в JavaScript - это значение. У нее есть свойства, и одно из них - length.

Это свойство не вызывает функцию и не смотрит, сколько аргументов передали при запуске.

Оно смотрит только на параметры в объявлении функции.

function createUser(name, age, city) {
  return name;
}

console.log(createUser.length);

Результат:

3

Функция без параметров

Если у функции нет параметров, свойство length вернет 0.

function showMessage() {
  console.log('Привет!');
}

console.log(showMessage.length);

Результат:

0

Несколько параметров

Если параметров несколько, length вернет их количество.

function getFullName(firstName, lastName) {
  return firstName + ' ' + lastName;
}

console.log(getFullName.length);

Результат:

2

То же самое работает с Function Expression и стрелочными функциями.

let multiply = function (a, b) {
  return a * b;
};

let double = (number) => number * 2;

console.log(multiply.length);
console.log(double.length);

Результат:

2
1

Параметры по умолчанию

С параметрами по умолчанию есть важная особенность.

length считает только параметры до первого параметра со значением по умолчанию.

function createUser(name, role = 'user') {
  return name + ': ' + role;
}

console.log(createUser.length);

Результат:

1

Параметр name посчитался, а role уже нет, потому что у него есть значение по умолчанию.

Если после параметра по умолчанию идут другие параметры, они тоже не попадут в length.

function example(a, b = 10, c) {
  console.log(a, b, c);
}

console.log(example.length);

Результат:

1

Rest parameters

Rest parameter не учитывается в length.

function sum(...numbers) {
  return numbers.length;
}

console.log(sum.length);

Результат:

0

Если перед rest parameter есть обычные параметры, они будут посчитаны.

function log(prefix, ...messages) {
  console.log(prefix, messages);
}

console.log(log.length);

Результат:

1

length и arguments.length

function.length и arguments.length - это разные вещи.

function.length показывает, сколько параметров записано в объявлении функции.

arguments.length показывает, сколько аргументов реально передали при вызове.

function showInfo(name, age) {
  console.log(showInfo.length);
  console.log(arguments.length);
}

showInfo('Анна');

Результат:

2
1

У функции два параметра, но при вызове передали только один аргумент.

Где используется

Свойство length иногда используют в библиотеках, отладке и служебном коде, когда нужно понять, сколько параметров ожидает функция.

function handler(event, index) {
  console.log(event, index);
}

console.log('Функция ожидает параметров: ' + handler.length);

Результат:

Функция ожидает параметров: 2

В обычном прикладном коде это свойство нужно не каждый день, но знать его полезно.

Итого

1. length у функции показывает количество параметров в объявлении.

2. length не показывает количество переданных аргументов.

3. Параметры по умолчанию и параметры после них не учитываются.

4. Rest parameter не учитывается в length.

5. Для количества переданных аргументов внутри обычной функции есть arguments.length.