DeepDive JS - 4일차 // 14 ~ 17장

2025. 1. 20. 16:59카테고리 없음

14장 전역 변수의 문제점 

 

변수의 생명 주기

지역변수의 생명주기는 함수의 생명 주기와 일치.
전역변수의 생명주기는 전역객체의 생주기와 일치

전역 변수 문제점 

암묵적결합 :  어디서든 전역을 참조, 변경 가능

긴 생명 주기  : 전역 변수는 생명주기가 길다

스코프 체인 상 종점에 존재 : 전역 변수의 검색 속도가 가장 느리다.

네임스페이스 오염 : 파일이 분리되어 있어도 하나의 전역 스코프를 공유한다는 것.

다른 파일에 동일한 이름 명명 전역 변수 및 전역 함수가 같은 스코프내에 존재할 경우 예상치 못한 결과

 

전역 변수의 사용을 억제하는 방법

즉시 실행함수/ 네임스페이스 객체/모듈 패턴(클로저(캡슐화))/ES6 모듈

 

 

15장 let, const 키워드와 블록 레벨 스코프

var :  전역(함수내에선 블록 레벨), 호이스팅 undefined로 초기화후 런타임시 값 할당, 변수 중복 선언 가능

let,const :블록 레벨(지역적), 호이스팅 tdz에 빠져서 참조에러 뜨고, 런타임시 초기화로 값 할당, 변수 중복 선언 x 

const : 변수 재할당 금지,객체의 경우 변경 가능.

되도록 let 보단 const를 사용하는 게 좋음 .

 

 

 

16장 프로퍼티 어트리뷰트 

자바스크립트 엔진의 구현 알고리즘 설명하기 위해. 내부 슬롯, 내부 메서드
공개적 접근 x  // , __proto__ 통해 간접접근.

프로퍼티 어트리뷰트 [[Value]], [[Writable]], [[Enumerable]], [[Configurable]]
object.getOwnProppertyDescriptor로 간접 확인 가능

프로퍼티 데이터//접근자 두개로 구분.
데이터  프로퍼티 : [[Value]], [[Writable]], [[Enumerable]], [[Configurable]]
접근자 프로퍼티  : [[get]], [[set]], [[Enumerable]], [[Configurable]]

 

프로퍼티 정의

object.defineProperty 메서드로 프로퍼티 어트리뷰트를 정의 할 수 있음 
설정시 생략하면, 기본값으로 false값이 됨.

 

객체 변경 방지

객체 확장 금지 object.preventExtenstions

객체 밀봉 : object.seal

객체 동결 : object.freeze  <- 재귀로 깊은 복사 가능.

 

 

 

17장 생성자 함수에 의한 객체 생성

객체 리터러에 의한 객체 생성방식은 단 하나만의 객체를 생성,
-> 생성자 함수는 프로퍼티 구조가 동일한 객체를 여러개 간편 생성

functuin Object ( ) { } 

const person = new Object ( )
new가 있어야 인스턴스(객체)를 생성하고, 이 객체는 object  함수의 내부의 this가 바인딩 됨.
new가 없으면 그냥 함수임.

 

그냥 함수의 경우 내부 메서드 call를 호출  
new 와 함께 올 경우 내부 메서드 constructor를 호출

new 와 함께 생성자 함수로 호출 되면 new.target은 함수자신(여기선 object)

 

constructor가 올 수 없는 함수는 
축약함수, 화살표 함수