JS - 빌트인 객체 / 실행 컨텍스트

정윤호·2024년 6월 7일
0

JS-Deep-Dive

목록 보기
4/7

빌트인 객체

자바스크립트 객체는 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 는 래퍼 객체를 생성하지 않음..!

전역 객체: 최상위 객체! 어떤 객체의 프로퍼티도 아니고 모든 객체를 소유함.

  • 브라우저는 window / node 는 global --> globalThis
  • 전역을 생성하는 생성자 함수는 없음
  • 전역 객체의 프로퍼티를 참조할 때, global, window 객체명을 생략함. -> bar = 2 이래도, window.bar = 2 같이 프로퍼티로 인식 / let const로 선언한 변수는 전역객체 프로퍼티가 아님.
  • 암묵적전역: 선언하지 않았는데... 프로퍼티 쓰는거 맹키로
    빌트인 전역 프로퍼티:
    -> Infinity: 무한을 의미하는 숫자 타입의 값
    -> NaN: 숫자 아님을 의미하는 숫자 타입 값
    -> undefined
    빌트인 전역 함수
    -> eval
    -> isFinite
    -> isNaN
    -> parseFloat
    -> parseInt
    -> encodeURI, decodeURI

this

[[JS - understanding of 'this']]

실행 컨텍스트

소스코드의 타입 [전역 코드 / 함수코드 / eval 코드 / 모듈 코드] -> 마다 다른 실행 컨텍스트

  1. 소스코드의 평가: 변수나 함수의 선언 -> 식별자를 키로 환경 레코드에 등록 + 실행: 선언문 제외 순차적인 코드 실행 (런타임), 변수를 바꾸는 등 소스코드 실행결과는 다시 환경 레코드에 등록.
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

렉시컬 환경

  • 전역에서
  1. 환경레코드 - 객체환경레코드/선언적 환경 레코드 / this binding GlobalThisValue 내부 슬롯에 전역 객체가 바인딩 됨. 그래서 this 는 전역을 가리킴.
  2. 외부 렉시컬 환경 참조: 상위 스코프 가리킴
  • 함수에서
  1. 함수 환경레코드: 함수 환경 레코드: 매개변수 포함 관리 / this binding ThisValue 내부 슬롯에 전역 객체가 바인딩 됨. 그래서 this 는 전역을 가리킴.
  2. 외부 렉시컬 환경 참조: 전역 렉시컬 환경 가리킴
profile
우리 인생 화이팅~

0개의 댓글