- 블록문 내부에서 함수 선언문의 사용을 지양해야 하는 이유는 무엇인가?
: 브라우저별로 함수 선언문이 동작하는 방식이 다르기 때문
: 블록문 내부에서 꼭 함수를 정의해야 한다면 함수 선언문보다 함수 표현식 사용
- 객체지향 프로그래밍의 단점은 무엇인가?
: 상속을 받아서 사용할 수 없는 프로퍼티와 메서드라면
undefined
를 호출하기 때문에 에러가 발생할 수 있음
: 에러가 발생하면 그 밑의 코드는 실행되지 않고 종료되기 때문에 위험함
- 메서드는 어떻게 생성하는 것이 바람직한가?
: 웬만하면 정적 메서드로 선언하는 것이 좋음
: 인스턴스 메서드로 생성하는 경우 인스턴스가 생성될 때마다 메서드도 함께 생성되어 메모리가 낭비될 뿐만 아니라 프로토타입 체인의 영향을 받기 때문에 함수 사용이 제한적임
- 객체지향 프로그래밍과 함수형 프로그래밍의 차이는 무엇인가?
: 객체지향 프로그래밍에서는 메서드를 호출한 객체를 무조건 알고 있어야 하고 이 객체를
this
로 바인딩함, 즉 함수 내부에서 반드시this
를 사용하게 됨
: 함수형 프로그래밍은 메서드에 참조할 객체를 인수로 받기 때문에 함수 내부에서this
를 사용하지 않음
:this
는 함수 호출 위치에 따라 동적으로 바인딩되기 때문에 스코프가 꼬이거나 가독성을 해칠 우려가 있음, 그러므로 최근의 프로그래밍 패러다임이 함수형 프로그래밍을 지향하는 것
- 프로토타입 교체는 바람직한가?
: 하지 않는 것이 좋음
: 프로토타입 교체를 하게 되면 객체지향 프로그래밍 패러다임을 너무 복잡하게 사용할 우려 존재, 즉 프로토타입 체인이 꼬이고 복잡해짐
: 프로토타입으로 상속을 구현한다면 1레벨 정도의 depth가 적당함
- 생성자 함수와 클래스는 언제 유용하게 사용할 수 있는가?
: 자료 구조를 생성할 때 유용함, 자료 구조는 동일한 프로퍼티 구조가 여러 개 존재하기 때문
in
연산자와for in
문은 연산 결과에 어떤 차이가 있는가?:
for in
문의 경우 프로퍼티 어트리뷰트 중[[Enumerable]]
의 값이true
인 것만 가져올 수 있지만,in
연산자는[[Enumerable]]
의 값에 상관없이 값을 반환함
in
연산자와Reflect.has
는 어떤 차이가 있는가?: 동작은 동일함, 단지
Reflect.has
는in
연산자의 함수 버전으로 새롭게 추가된 것
2.toFixed()
가 에러를 출력하는 이유는 무엇인가?:
2
라는 수 뒤에 오는.
을 자바스크립트 엔진은 소수를 나타내기 위한 것이라고 판단하기 때문에 파싱 에러 출력
: 이를 해결하기 위해2
를(2)
로 변경
- 자바스크립트의 객체는 어떻게 분류할 수 있는가?
: 표준 빌트인 객체, 호스트 객체, 사용자 정의 객체
- 표준 빌트인 객체는 무엇인가?
: ECMAScript 사양에 정의된 객체, 전역 객체의 프로퍼티로서 제공되어 실행 환경과 관계없이 언제나 어디서든 참조하여 사용할 수 있음
- 호스트 객체는 무엇인가?
: ECMAScript 사양에 정의되어 있지 않고, 자바스크립트 실행 환경에서 추가로 제공하는 객체
: 브라우저 환경에서는 DOM, BOM, fetch 등 클라이언트 사이드 Web API가 해당되고, Node.js 환경에서는 고유의 API가 해당됨
- 사용자 정의 객체는 무엇인가?
: 자바스크립트 엔진이 기본으로 제공하는 객체가 아닌, 사용자가 직접 정의한 객체
- 원시값이 존재하는데도
String
,Number
,Boolean
같은 표준 빌트인 생성자 함수가 존재하는 이유는 무엇인가?: 자바스크립트 엔진은 원시값에 객체처럼 접근했을 때 임시 객체인 래퍼 객체를 생성하여 사용할 수 있게 해주기 때문
- 래퍼 객체는 무엇인가?
: 원시값에 마침표 표기법(
.
)이나 대괄호 표기법([ ]
)을 사용하여 객체처럼 접근하는 경우 자바스크립트 엔진이 빌트인 생성자 함수를 사용하여 임시로 생성하는 인스턴스를 말함
: 래퍼 객체를 통해서 원시값인데도 불구하고 임시로 빌트인 생성자 함수의 프로토타입에 존재하는 빌트인 메서드를 사용할 수 있게 됨
- 빌트인 메서드 사용이 끝나면 래퍼 객체는 어떻게 되는가?
: 래퍼 객체가 생성될 때 내부 슬롯
[[StringData]]
,[[NumberData]]
등의 값으로 기존 원시값이 저장되는데, 메서드 사용이 끝나면 저장된 기존 원시값을 생성하고 식별자를 다시 바인딩하여 원시값으로 되돌려놓음
: 원시값으로 되돌려지면 래퍼 객체는 더 이상 참조되지 않기 때문에 가비지 컬렉터에 의해 메모리에서 제거됨
- 래퍼 객체를 생성할 수 있는 원시값에는 무엇이 있는가?
: 문자열, 숫자, 불리언, 심벌만 해당
:null
,undefined
는 해당하지 않음
- 전역 객체란 무엇인가?
: 코드가 실행되기 이전에 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체
: 표준 빌트인 객체, 호스트 객체,var
키워드로 선언한 전역 변수, 전역 함수, 암묵적 전역을 프로퍼티로 가짐
- 전역 객체는 프로토타입 체인 상에서의 최상위 객체인가?
: 전역 객체와 프로토타입 체인은 관계가 없음
: 단지 어떤 객체에도 속하지 않은 빌트인 객체(Object
,Function
등)를 프로퍼티로 가지는 객체일 뿐임