-
[ES6] var, let, const 비교맨땅에코딩/javascript 2020. 6. 26. 16:45
[서문]
1.블록 레벨 스코프
함수 레벨 스코프 (function-level scope)
: 함수 내에서 선언된 변수는 함수 내에서만 유효하며 함수 외부에서는 참조할 수 없다. 즉, 함수 내부에서 선언한 변수는 지역 변수이며 함수 외부에서 선언한 변수는 모두 전역 변수이다.
블록 레벨 스코프 (Block-level scope)
: 모든 코드 블록(함수, if문, for문, while문, try/catch문 등) 내에서 선언된 변수는 코드 블록 내에서만 유효하며 코드 블록 외부에서는 참조할 수 없다. 즉, 코드 블록 내부에서 선언한 변수는 지역 변수이다.
2. 호이스팅
var, let, const, function등의 선언문을 해당 스코프의 선두로 옮긴 것처럼 동작하는 특성
선언 단계 (Declaration phase)
: 변수를 실행 컨텍스트의 변수 객체에 등록한다. 이 변수 객체는 스코프가 참조하는 대상이 된다.
초기화 단계 (Initialization phase)
: 변수 객체에 등록된 변수를 위한 공간을 메모리에 확보한다. 이 단계에서 변수는 undefined로 초기화된다.
할당 단계 (Assignment phase)
: undefined로 초기화된 변수에 실제 값을 할당한다.
3. 클로져
: 함수를 일급 객체로 취급하는 함수형 프로그래밍 언어에서 사용되는 중요한 특성이다.
MDN 정의 ) 클로저는 함수와 그 함수가 선언됐을 때의 렉시컬 환경 (Lexical environment) 과의 조합이다.
렉시컬 스코핑
: 스코프는 함수를 호출할 때가 아니라 함수를 "어디에" 선언하였는지에 따라 결정된다.
렉시컬 스코프
: 자신이 속한 상위 스코프
[결론]
var vs let
- 전역객체(Global Object)는 모든 객체의 최상위 객체 의미, Browser : windowrorcp, server-side : global객체
- var 키워드로 선언된 변수로 사용하면 전역 객체의 프로퍼티가 된다.
- let 전역 변수는 전역 객체의 프로퍼티가 아니다. window.a 처럼 접근 할 수 없다. 보이지 않는 개념적 블ㄺ 내에 존재
let vs const
- 상수를 위해 사용됨 (반드시 상수만을 위한 것은 아니다.)
- let은 재할당이 가능하나 const는 불가능하다. > 선언과 동시에 할당이 이뤄져야 한다.
- 블록레벨 스코프
- 재할당은 불가능하지만 객체의 내용은 변경할 수 있다.
[참조]
'맨땅에코딩 > javascript' 카테고리의 다른 글
apply,call,bind 비교 (0) 2020.09.11 [ES6] WeakSet vs Set [번역] (0) 2020.08.09 [ES6] WeakMap vs Map [번역] (0) 2020.08.09 [ES6] Set vs Array 비교 [번역] (0) 2020.08.07 [ES6] Map vs Object 비교 [번역] (0) 2020.08.07