(책에서 나왔듯!) js에서 함수는 값이다! 자료형으로 따지면 “객체” 이다.
즉 함수도 프로퍼티를 가질 수 있고, 기본적인 프로퍼티가 존재한다.
name 프로퍼티function sayHi() {
alert("Hi");
}
alert(sayHi.name); // sayHi
fn.name 은 함수의 이름을 저장하는 프로퍼티이다. 신기하게, js엔진은 적절한 값을 name에 대입해준다.
해당 기능은 명세서에 ‘contextual name’ 이라고 명시가 되어있다.
[여러 예시들]
let sayHi = function() { //이름이 없는 익명 함수. 책에서는 함수 선언식으로 나왔다.
alert("Hi");
};
alert(sayHi.name); // sayHi (익명 함수이지만 이름이 있다)
function f(sayHi = function() {}) {
alert(sayHi.name); // sayHi (이름이 나온다!!)
}
f();
let user = {
sayHi() {
// ...
},
sayBye: function() {
// ...
}
}
alert(user.sayHi.name); // sayHi
alert(user.sayBye.name); // sayBye
length 프로퍼티fn.length 는 해당 함수의 매개변수의 개수를 반환한다. 단 나머지 매개변수는 개수에 포함되지 않는다.
function f1(a) {}
function f2(a, b) {}
function many(a, b, ...more) {}
alert(f1.length); // 1
alert(f2.length); // 2
alert(many.length); // 2