일단 함수부터!

(책에서 나왔듯!) 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