javascript에서 함수가 객체다?

js에서 함수는 값임. 그리고 함수 자료형은 객체임. 즉 호출 가능한 행동 객체이다. 따라서 호출 가능하고 객체처럼 프로퍼티 추가 제거가 가능함.

  1. name 프로퍼티: 함수 이름 불러오는 프로퍼티 . 객체 메서드도 불러올 수 있음.

    function sayHi() {
      alert("Hi");
    }
    
    alert(sayHi.name); // sayHi
    
  2. length 프로퍼티: 매개변수의 개수를 반환

function f2(a, b) {}
alert(f2.length); // 2

여기서 …handlers는 나머지 매개변수이다. 즉, 전달된 인수 중에서 정해진게 아닌 나머지들을 배열로 모아서 전달하는것…

[ ()⇒alert(’OK선택), result⇒ alert() ] 이 들어간다.

if에서 handler 인자 갯수에 따라서 실행됨. 이때 ()⇒ 이게 length가 0인거고 나머지는 else ahdnler로 들어감.

사용자가 isYes 라면 즉, 컨펌 창에 yes 버튼을 눌렀으면 ok를 눌렀습니다.. 그게 아니면 실행하는게 없음.

즉 사용자가 ok누르면 ok선택했따 + alert(true)가 뜨고

cancel을 누르면 0일때 isYes일때만 실행하니 없고, false만 alert로 나타난다.

function ask(question, ...handlers) {
  let isYes = confirm(question); //confirm은 밑에 있는 창의 값.

  for (let handler of handlers) {
    if (handler.length == 0) {
      if (isYes) handler();
    } else {
      handler(isYes);
    }
  }
}

// 사용자가 OK를 클릭한 경우, 핸들러 두 개를 모두 호출함
// 사용자가 Cancel을 클릭한 경우, 두 번째 핸들러만 호출함
ask(
  "질문 있으신가요?",
  () => alert("OK를 선택하셨습니다."),
  (result) => alert(result)
);