Javascript

[Javascript] 함수에도 길이(length) 속성이 있다.

apost 2023. 1. 19. 22:04

다소 황당할 수도 있지만 자바스크립트는 함수에도 길이 속성이 있습니다.

결론부터 말하면 살짝 버그성입니다. 그리고 최신 자바스크립트 버전업과 함께 길이 속성이 부정확해지는 경우가 발생하면서 사실상 필요 없는 속성이 되었습니다.

 

함수의 길이는 어떤 길이를 말하는 것인가?

함수의 길이 속성 값은 함수의 인자 개수를 반환합니다.

 

function dofunc(a, b, c){

}
console.log(dofunc.length);

 

dofunc.length 속성 값은 인자 개수인 3을 반환합니다.

처음 보면 조금 말이 안 되는 논리지만, 어쨌든 인자 개수를 길이 속성 값으로 사용합니다.

 

단, 문제가 있습니다.

펼침 연산자(...)가 등장하고, 펼침 연산자를 이용한 나머지 파라미터를 사용할 수 있게 되면서 이 길이 속성이 부정확해졌습니다. 길이 속성은 나머지 파라미터를 인식하지 못하며, 나머지 파라미터 앞쪽에 나열된 인자의 개수만을 반환합니다.

 

다음 함수는 나머지 파라메터 앞의 인자 2개 만을 카운트해서 길이 속성으로 2를 반환합니다.

 

const params = ['c', 'd'];
function dofunc(a, b, ...params){

}
console.log(dofunc.length);