함수는 객체이기 때문에 매서드도 사용가능하고 프로퍼티를 추가하는 것도 가능하다.
function func(a,b, ...rest) {}
console.log(func.name) // func
console.log(func.length) // 2 매개변수 개수 출력
*나머지 표현식(...rest)은 존재하더라도 길이에 포함안됨.
함수에 프로퍼티를 추가
func.counter = 0;
console.log(func.counter) // 0
함수프로퍼티를 사용하는 이유는 클로저를 대체할 수 있다는 점이다. 함수 내부에서 선언된 변수는 외부에서 접근할 수 없는데 함수프로퍼티에 값을 저장하면 외부에서도 접근할 수 있다.
함수 내부에서 자신을 호출하는 경우에 사용한다. 함수 표현식에서만 사용가능하다.
화살표 함수일 경우에도 사용 불가능
let sayHi = function hi() {}
보통 함수내부에서도 자신을 호출할 때 sayHi()를 사용하지만 hi()로 호출하면
안전한 점이 있다.
let copy = sayHi
sayHi = null
함수를 카피하고 기존 변수는 제거하거나 다른 용도에 사용하면 sayHi()를 호출할
경우 에러가 나게 되어있다. 하지만 기명 함수 표현식으로 호출하게 되면
에러를 방지할 수 있다.