- Type Error는 왜 발생하는가?
: 개발자가 식별자에 들어있는 값을 착각하는 경우에 발생
- 객체란 무엇인가?
: 주체(Subject)가 인식할 수 있는 모든 것
: 프로그래밍에서의 주체는 개발자, 즉 개발자가 인식하고 생성할 수 있는 모든 것을 의미
: 우리가 실생활에서 사물을 속성의 집합으로 인식하는데, 프로그래밍의 객체 역시 사물을 속성의 집합으로 인식하는 사고 방식을 따온 것
: 결국 객체는 속성의 집합이라고 볼 수 있음
- 어트리뷰트와 프로퍼티의 차이점은 무엇인가?
: 어트리뷰트는 상태만 나타내기 때문에 정적임
: 프로퍼티는 상태도, 동작도 나타내기 때문에 동적일 수 있음
- 함수 선언문을 평가할 때 함수 몸체 내부의 문들은 어떻게 처리하는가?
: 함수 평가 과정에서는 굳이 몸체 내부의 문들을 참조하지 않고, 함수 호출 이후에 몸체 내부의 문에 접근하여 실행함
: 함수 평가 과정에서 몸체 내부의 문들을 참조하지 않는 이유는 함수 호출이 이루어지지 않을 수도 있는데, 그런 경우에 굳이 문들을 참조할 필요가 없기 때문
- 함수 호출문은 왜 제어문인가?
: 제어문은 코드 흐름을 인위적으로 변경하는 문을 의미함, 함수 호출문 역시 일반적인 코드의 흐름에서 벗어나서 함수를 실행하기 때문에 제어문에 해당함
- 스코프 체인은 왜 단방향인가?
: 양방향으로 식별자를 검색하면 계속 순환하면서 참조하는 현상 발생, 즉 무한 루프에 빠질 수 있음
- 대부분의 프로그래밍 언어에서 렉시컬 스코프를 사용하는 이유는 무엇인가?
: 동적 스코프는 호출될 때마다 상위 스코프가 변경되므로 정적 스코프를 사용하기가 더 쉽기 때문
- 렉시컬 스코프는 왜 필요한가?
: 식별자를 결정하기 위해서는 우선 식별자를 검색할 수 있어야 하는데, 이 검색 과정에서 상위 스코프를 참조할 수 있어야 하기 때문에 렉시컬 스코프가 필요함
: 결국은 렉시컬 스코프의 존재 의의가 곧 클로저
- 함수 객체만 가지는 내부 슬롯은 무엇인가?
: 모든 객체는 기본적으로
[[Prototype]]
이라는 내부 슬롯을 가짐, 함수 객체는 여기에[[Environment]]
라는 추가적인 내부 슬롯을 가짐
arguments
프로퍼티는 ES3 이후로 폐지되었는데, 여기서의 폐지는 무엇을 의미하는가?: ES3 이전엔 존재했지만 지금은 사라진 개념이 아님
: 현재도 존재하지만 사용을 권장하지 않는 개념, 존재하는 이유는 하위 호환을 고려하기 위한 목적
arguments
객체는 왜 존재하는가?: 매개변수를 선언하지 못하는 가변 인자 함수 같은 경우, 그 인수를 저장하기 위해 존재
- 순회와 열거의 차이는 무엇인가?
: 순회는 순서가 중요함, 즉 배열의 요소를 참조할 때 사용하는 방식
: 열거는 순서가 중요하지 않음, 즉 객체의 프로퍼티를 참조할 때 사용하는 방식
: 객체는 열거되기 때문에 프로퍼티의 순서가 바뀌어도 같은 객체임
- 유사 배열 객체의 조건은 무엇인가?
: 프로퍼티 키가 ‘0, 1, 2, 3’ 등의 순차적인 문자열이어야 함
:length
프로퍼티가 존재해야 함
- 유사 배열 객체가 일반 배열보다 나은 점은 무엇인가?
: 배열보다 객체가 나은 점은 프로퍼티 값으로 메서드를 자유자재로 만들 수 있다는 점
: 그러나 기본적으로 빌트인된 배열 메서드가 존재하기 때문에, 모던 자바스크립트에서 유사 배열 객체는 사용하지 않음
- 현재 자바스크립트에서는 유사 배열 객체를 어떻게 대체하는가?
: Rest 파라미터인
...
를 사용하여 애초에 매개변수를 배열로 받아오면 굳이arguments
를 번거롭게 참조하지 않을 수 있음
- 생성자 함수의 단점은 무엇인가?
: 객체를 생성할 때마다 메서드를 생성하기 때문에 메모리가 낭비됨, 객체 생성 시 비용도 많이 듦
- 생성자 함수의 단점을 어떻게 해결할 수 있는가?
: 상위 객체인 프로토타입의 상속으로 해결하거나, 외부 함수를 인수로 받아오는 조합으로 해결
- 함수는 무엇에 의해 동작을 달리 하는가?
: 호출 방식에 따라 일반 함수, 생성자 함수, 메서드로 동작이 달라짐
- 생성자 함수가 가지는
prototype
프로퍼티의 값은 무엇인가?: 생성자 함수가 생성할 인스턴스의 프로토타입
: 이 프로토타입에 인스턴스가 공통으로 포함하는 메서드를 옮겨놓고 상속시킬 수 있음
- 생성자 함수의
prototype
프로퍼티를 이용하여 메서드를 어떻게 상속시킬 수 있는가?:
this
키워드 대신생성자 함수 이름.prototype
에 메서드를 체이닝시켜야 함
: 그러나 체이닝시킨 메서드가 생성자 함수 내부에 존재한다면, 똑같이 인스턴스 생성 시 함수 객체도 생성되기 때문에 메모리가 낭비됨
: 함수 밖으로 메서드를 빼서 사용하되, 즉시 실행 함수로 묶어주면 같은 생성자 함수 로직임을 표현할 수 있음
- 스코프 체인과 프로토타입 체인의 차이는 무엇인가?
: 스코프 체인은 식별자를 검색하는 규칙, 프로토타입 체인은 프로퍼티를 검색하는 규칙
- 프로퍼티 키의 이름을 지을 때 식별자 네이밍 규칙을 준수해야 하는가?
: 프로퍼티는 식별자가 아니기 때문에 준수하지 않아도 됨
console
객체의 특징은 무엇인가?: ECMAScript 사양에 명시된 객체, 즉 빌트인 객체가 아니라 호스트 객체임
: 그러므로 브라우저 환경과 노드 환경에서의console.log
출력 결과가 다르게 나타남