오늘 한 일
- 모던 자바스크립트 Deep Dive 07.연산자 ~ 12.함수
배운 것
- 숫자가 NaN인지 조사하려면 === 이 아닌 빌트인 함수 Number.isNaN을 사용한다.
- null 타입 여부 확인은 typeof 연산자가 아닌 === 을 사용하자
- 논리 연산자를 사용한 단축 평가
- 옵셔널 체이닝 연산자(?.) : 객체를 가리키기를 기대하는 변수가 null 또는 undefined가 아닌지 확인하고 프로퍼티를 참조할 때 유용하다
- null 병합 연산자(??) : 변수에 기본값을 설정할 때 유용
- 객체: 키와 값으로 구성된 프로퍼티(data)와 메서드(behavior)로 구성
- 자바스크립트에서 함수는 값으로 취급할 수 있기 때문에 프로퍼티 값으로 사용할 수 있다
- 원시 타입과 객체(참조) 타입 차이점 3가지
- 원시 값은 변경 불가능, 객체는 변경 가능
- 원시 값은 변수(확보된 메모리 공간)에 실제 값을 저장, 객체는 참조 값을 저장
- 다른 변수에 할당시 원시 타입은 원본의 원시 값이 복사되어 전달되고(pass by value), 객체 타입은 원본의 참조 값이 복사되어 전달됨(pass by reference)
- const 키워드를 사용한 변수에 할당한 객체는 변경할 수 있다
- 자바스크립트는 클래스 없이 객체를 생성할 수 있으며 객체가 생성된 이후라도 동적으로 프로퍼티와 메서드를 추가할 수 있다. 프로퍼티를 삭제할 수도 있다
- ===를 통해 객체를 할당한 변수를 비교하면 참조 값을 비교
- 자바스크립트의 함수는 객체 타입의 값이다
- 자바스크립트 엔진은 생성된 함수를 호출하기 위해 함수 이름과 동일한 이름의 식별자를 암묵적으로 생성하고 거기에 함수 객체를 할당한다
- 함수는 함수 이름이 아니라 함수 객체를 가리키는 식별자로 호출한다
- 자바스크립트의 함수는 값의 성질을 갖는 객체인 일급 객체다. 즉 함수는 값처럼 자유롭게 사용할 수 있으며 함수 리터럴로 생성한 함수 객체를 변수에 할당할 수 있다
- 함수 선언문도 런타임 이전에 자바스크립트 엔진에 의해 먼저 실행된다(함수 호이스팅)
- 함수 표현식의 함수 리터럴도 할당문이 실행되는 시점에 평가되어 함수 객체가 된다
- 함수 표현식으로 함수를 정의하면 함수 호이스팅이 아닌 변수 호이스팅이 발생한다
- 함수 호출 시 매개변수에 값을 전달하는 방식: call by value, call by reference
- 콜백 함수: 함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수
- 비순수 함수, 순수 함수: 부수 효과(외부 상태에 의존하거나 외부 상태를 변경하는 효과)의 유무
- 함수형 프로그래밍: 순수 함수와 헬퍼 함수의 조합을 통해 외부 상태를 변경하는 부수 효과를 최소화해서 불변성을 지향하는 프로그래밍 패러다임