12일차 - 2022.03.12

안병욱·2022년 3월 12일
0

오늘 공부한 내용 요약

( 모던 JavaScript 튜토리얼 학습 )

1. 객체로서의 함수와 기명 함수 표현식

함수는 함수는 호출이 가능한 행동 객체

  • name 프로퍼티
let sayHi = function() {
  alert("Hi");
};

alert(sayHi.name);

이름이 없는 함수의 이름을 지정할 땐 컨텍스트에서 이름을 가져오는 이 기능을 'contextual name’이라고 함.

객체 메서드의 이름도 가능

let user = {

  sayHi() {
    // ...
  },
}

alert(user.sayHi.name); // sayHi

  • 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

-> 나머지 매개변수는 개수에 포함되지 않음

  • 커스텀 프로퍼티
    함수에 자체적으로 만든 프로퍼티를 추가할 수도 있습니다.
function sayHi() {
  alert("Hi");

  // 함수를 몇 번 호출했는지 세봅시다.
  sayHi.counter++;
}
sayHi.counter = 0; // 초깃값

sayHi(); // Hi
sayHi(); // Hi

alert( `호출 횟수: ${sayHi.counter}회` ); // 호출 횟수: 2회

  • 클로저를 사용하는 것 대신에 함수 프로퍼티를 사용해 count를 함수에 바인딩시킨 경우엔 외부에서 값을 수정할 수 있습니다.
function makeCounter() {

  function counter() {
    return counter.count++;
  };

  counter.count = 0;

  return counter;
}

let counter = makeCounter();

counter.count = 10;
alert( counter() ); // 10

  • 기명 함수 표현식(이름이 있는 함수 표현식)

1.이름을 사용해 함수 표현식 내부에서 자기 자신을 참조할 수 있습니다.
2.기명 함수 표현식 외부에선 그 이름을 사용할 수 없습니다.

(이름을 붙여도 여전히 함수 표현식이다)

let sayHi = function func(who) {
  if (who) {
    alert(`Hello, ${who}`);
  } else {
    func("Guest"); // func를 사용해서 자신을 호출합니다.
  }
};

sayHi(); // Hello, Guest

// 하지만 아래와 같이 func를 호출하는 건 불가능합니다.
func(); // 에러 (기명함수 표현식 밖에서는 이름에 접근 불가)

  • 함수 선언문엔 내부 이름을 지정할 수 없다.
    내부 이름은 함수 표현식에만 사용할 수 있고, 함수 선언문엔 내부 이름을 지정할 수 있는 문법이 없어 사용할 수 없다

공부사이트

코어 자바스크립트



위의 내용은 공부중 본인이 이해한 내용으로 몇몇 틀린 내용이 있을 수 있습니다.
회독중 발견시 수정하겠습니다

profile
working hard

0개의 댓글