220524
암묵적 결함: 모든 코드가 전역 변수를 참조하고 변경할 수 있음
-> 1. 변수의 유효범위가 크면 가독성이 나빠짐
-> 2. 의도치 않은 상태 변화가 발생할 수 있음
긴 생명 주기
-> 1. 메모리 리소스를 오랜 기간 잡아먹는다.(브라우저 상에서는 브라우저가 닫힐 때까지)
-> 2. var는 특히 재할당이 가능하기 때문에 의도와는 다르게 값이 바뀔 수 있다.
스코프 체인 상 종점에 존재
-> 변수 검색 시 가장 마지막에 검색됨
네임스페이스 오염
-> 파일이 분리되어 있어도 하나의 전역 스코프 공유하기 때문에 문제 발생 가능성 있음 *
즉시 실행 함수
-> 모든 코드를 즉시 실행 함수로 감싸면 변수를 지역변수로 만들 수 있다.
네임스페이스 객체
-> 객체 안에 객체를 만들어 계층적으로 구성, 스코프를 줄일 수 있다.
but, 네임스페이스 객체 자체가 전역 변수에 할당되므로 그닥.
모듈 패턴 like 클래스
변수와 함수를 모아 즉시 실행 함수로 감싸서 모듈을 만듦
220525
문은 변수할당 불가능
식 -> 값으로 평가 할 수 있는 문 => 변수에 할당 가능!
so, 삼항연산자는 표현식이므로 변수의 할당 가능!
=> 둘 구분 어떻게?
프로퍼티 정의할 때 프로퍼티 어트리뷰트 선택 가능! (Object.defineProperty)
enumerable: false => 열거X(for ...)
writable: false => 값 변경X
configurable: false => 삭제X, 재정의X
Objec.defineProperty로 프로퍼티 정의시 일부 어트리뷰트 생략가능
확장X(객체확장X): Object.preventExtensions: 추가 금지(2가지: 동적, defineProperty), 삭제는 가능
재정의X(객체밀봉): Object.seal -> 읽기와 쓰기만 가능
읽기만 가능(객체 동결): Object.isFrozen
중첩객체 동결(불변 객체): 재귀적 Object.freeze