В JavaScript вы можете получить количество аргументов, ожидаемых функцией, используя свойство length. Это может быть полезно, когда вы являетесь автором библиотеки (наверное). Мой друг Джейсон спросил меня о конкретных вариантах использования. Я придумаю несколько и отредактирую этот пост позже.

function add (a, b) { return a + b; } 
console.log(add.length); // 2

Вопрос, который я никогда не задавал себе, заключается в том, как на свойство длины влияет оператор покоя (function a (a, ...b) { }).

Большое спасибо за Еженедельный информационный бюллетень Web Tools здесь. Луи Лазарис не только перечисляет инструменты, но также объясняет мельчайшие детали JavaScript, например, этот вопрос об операторе rest и свойстве длины функции в первом разделе информационного бюллетеня.

Так! Как оператор rest влияет на fn.length? Давайте посмотрим на фрагмент, включенный в информационный бюллетень.

function myFunc1 (a, ...b) { } 
function myFunc2 (a, b, c, ...d) { }
function myFunc3 (...d) { }
console.log(myFunc1.length); // 1
console.log(myFunc2.length); // 3
console.log(myFunc3.length); // 0

Как вы видите выше, оператор rest не «учитывается» в свойстве длины функции. Интересный!

Но на самом деле это заставило меня задуматься… а что тогда со значениями по умолчанию?

function myFunc1 (a = 1, b = 2) { }
function myFunc2 (a = 1, b) { }
function myFunc3 (a, b = 2) { }
console.log(myFunc1.length) // 0
console.log(myFunc2.length) // 0
console.log(myFunc3.length) // 1

Более или менее то же самое… не считается (и когда первый аргумент является значением по умолчанию, длина равна нулю). Полезно знать!

Это обучение ничего не меняет в мире, но я думаю, хорошо знать эти крошечные детали языка, на котором мы пишем каждый день. 🎉

Отредактировано: Мой друг Робин написал хорошее продолжение «Свойству длины функции нельзя доверять» к этой статье. Так что вы можете проверить это.

Первоначально опубликовано на www.stefanjudis.com.