- Global Object (전역 객체)
- JS engine process 생성(시작) 시 맨 먼저 생성
- BuiltIn(standard) propertoes & functions
- host object(browser, node API) 및 var/function object도 보유
- 전역 변수는 전역 객체에 영원히(process 종료시까지) 존재한다.
- 직접 생성(컨트롤) 못하고 window(globalThis) 키워드 생략 가능
- const/let은 전역 객체가 아닌 Declarative Enviroment Record에 별도 생성
- 선언이 없는 식별자는 암묵적 전역으로 전역 객체에 등록된다. (ex. ig = 1;)
- encode/decode URI
- encodeURI(), decodeURI()
- 서버가 인식할 수 있는 문자를 제외하고 encoding/decoding
- encodeURIComponent(), decodeURIComponent()
- 서버가 인식할 수 있는 문자까지 모조리 encoding/decoding
- encodeURI(), decodeURI()
- 렉시컬(Lexical) 스코프
- Lexical Scope
- Global Scope
- Function Scope
- Block Scope
- Scope & Lexical Scope Chain
- scope
- 각 식별자들의 유효 범위
- Global, Function(var/function), Block(const/let)
- Lexical Scope Chain
- 각 scope 별 Lexical Enviroment 생성되고 이들 hierarchy는 단방향으로 연결되어 있다.
- 함수는 어디에서 정의했는지에 따라 상위 scope가 결정된다.
- Static Scope: 정의된 위치 기반
- Dynamic scope: 어디서 호출, 호출된 시간 기반
- 동일 scope의 변수는 실행 시간이 가장 늦은 곳의 값이 최종 할당된다.
- identifier resolution
- 식별자를 찾아 떠나는 여행
- local (function, block), scope(inner → outer) → global
- 오른쪽으로 갈수록 변수의 생명주기는 길어진다. 전역변수 사용 자제하기
- scope
- Module Scope
- eval(string)
- Lexical Scope
- JS Execution Context
- ExecutionContext(실행 컨텍스트)를 생성하는 Code의 분류
- 전역, 함수, eval, module 코드는 각각의 실행 컨텍스트를 생성한다. 이들은 CallStack에 생성되므로 이를 Execution Context Stack이라 부른다.
- LexicalEnvironment(렉시컬 환경)
- 실행 컨텍스트가 참조하는 자료구조
- Global
- Function
- ExecutionContext - LexicalEnvironment - EnvRec
- ExecutionContext(실행 컨텍스트)를 생성하는 Code의 분류
- strict(엄격) mode
- 오해의 소지가 있는 구문을 문법적으로 명확하게 평가
- hoisting은 동일하나 block내 함수는 block scope를 갖는다.
- 'use strict';
- strict mode의 특징
- 선언하지 않은 식별자는 access(접근)할 수 없다.
- 암묵적 전역(var, implicit global)은 허용하지 않는다.
- delete로 선언된 변수, 함수, 매개변수를 삭제할 수 없다.
- block내에서 var은 sloppy(느슨한) mode와 동일한 scope이지만, 함수는 block scope 이다.
- 한 함수에서 parameter(매개변수) 이름이 동일하면 안된다.
- NaN, Infinite 등의 전역 프로퍼티에 값을 할당하면 안된다.
- ESM module은 strict mode로 실행된다.
- Closure(클로저)
- 상위 scope의 식별자를 참조하는 하위 scope(함수, 메서드)가 외부에서 지속적으로 참조되어 상위 scope 보다 저 오래 살아있는 것
- Memoization
- 반복되는 결과를 메모리에 저장하여 같은 결과가 사용될 때 저장한 값을 사용해 빠르게 실행하는 기법
728x90
'JS & TS > JavaScript' 카테고리의 다른 글
[JavaScript] Array (0) | 2024.02.08 |
---|---|
[JavaScript] function (0) | 2024.02.08 |
[JavaScript] 할당, 구조분해할당 (0) | 2024.02.08 |
[JavaScript] 형 변환, Hoisting (0) | 2024.02.08 |
[JavaScript] Javascript란? (0) | 2024.02.08 |