자바스크립트 객체는 3가지 분류. 표준 빌트인 객체: 실행환경 상관없이 언제나 참조 가능. 전역 객체의 프로퍼티로 제공. like console / 호스트 객체: 브라우저나 node 환경에서 추가로 제공하는 객체. 브라우저-DOM, BOM, Canvas, fetch... / 사용자 정의 객체
ex) Object, String, Boolean, Function, Error, Math, JSON...
대부분은 인스턴스를 생성하는 생성자 함수 객체. Math, Reflect, JSON 같은 객체는 정적 메서드만 제공. 생성자 함수 객체는 프로토타입 메서드 제공
생성자 함수로 인스턴스를 만들면, 생성자 함수의 프로토타입과 바인딩 되기 때문.
ex) 10 .toString() -> 프로토 타입 메서드 / Number.isInteger() -> 정적 메서드
원시값이 이미 있는데, Boolean, String, Number 등의 래퍼 객체가 있는 이유는? 프로토타입 메서드를 상속받아 사용 가능. 객체 처리가 종료되면 원래의 상태인 원시값으로 돌아감
래퍼객체는 가비지 콜렉터가 처리함.
단, null 과 undefined 는 래퍼 객체를 생성하지 않음..!
[[JS - understanding of 'this']]
var x; // x: undefined
x = 1; // x: 1
// 전역 변수 선언
var x = 1;
const y = 1;
// 함수 정의
function foo(a){
// 지역 변수 선언
const x = 10;
const y = 20;
//메서드 호출
console.log(a + x + y);
}
// 함수 호출
foo(100);
//메서드 호출
console.log(x + y);
전역 코드 평가 / 실행 -> 함수 코드 평가 / 실행
이런 코드 진행을 위해서는 스코프, 식별자, 코드 실행 순서 등을 관리해야...
소스코드를 실행하는데 필요한 환경을 제공, 코드의 실행 결과를 실제로 관리하는 영역. 모든 코드는 실행 컨텍스트를 통해 실행되고 관리됨.
1. 식별자와 스코프는 실행컨텍스트의 렉시컬 환경으로 관리
2. 실행 순서는 실행 컨텍스트 스택으로 관리
1. 전역 코드의 평가와 실행 push
2. foo 함수 코드의 평가와 실행 push
3. bar 함수 코드의 평가와 실행 push
4. foo 함수 코드로 복귀 pop
5. 전역 코드로 복귀 pop