상세 컨텐츠

본문 제목

[EcmaScript6] let, const

개발공부/EcmaScript6

by 임우찬 2019. 9. 11. 11:08

본문

 

1. "use strict" 란?

- Strict Mode의 선언방식이다.

- Strict Mode란, 코드에 더 나은 오류검사를 적용하는 방법이다.

- js 파일 첫 출에 "use strict"를 작성한다. 두 번째 줄에 debugger 키워들을 작성해준다.

- "use strict"를 작성한 이유는 class 오브젝트와 같은 일부 오브젝트는 strict 모드에서 실행이 기본이기 때문이다.

- debugger 키워드는 별도의 조치를 취하지 않고 바로 소스코드를 라인 단위로 디버깅 할 수 있어 편리하다.


2. 글로벌 변수와 로컬 변수

- 크게 변수를 로컬변수(local variable)와 글로벌 변수(global variable)로 구분한다.

- 변수를 구분하는 이유는 "스코프(scope)" 때문이다.

- 로컬 변수는 함수 또는 오브젝트를 사용하려는 의도이며, 글로벌 변수는 프로그램 전체에서 공용으로 사용하려는 의도이다.

- 글로벌 변수에 대한 큰 오해가 있는데, 글로벌 오브젝트에 작성한 변수는 글로벌 오브젝트가 스코프이다.

- 글로벌 오브젝트에 작성했으므로 글로벌 변수라고 부르는 것이지, 글로벌 오브젝트에서 보면 로컬 변수이다.

- 글로벌 변수도 var 키워드를 사용하여 작성하는 것이 정확한 작성이다.

- 다만, var 키워드를 작성하지 않는다면, 글로벌 변수로 간주된다는 점에 의해 var 키워드를 사용하지 않는 것이다. (글로벌 변수는 var키워드를 사용하지 않는다는 것이 아니다.)

- 글로벌 변수가 편해보이지만, 객체지향 관점에서 보면 단점이다.(내가 사는 집의 물건을 아무나 사용하는 느낌)

- 함수 안에서 글로벌 오브젝트에 작성된 글로벌 변수를 사용할 수는 있지만, 다른 프로그램에서 값을 변경할 수 있다는 위험은 감수해야 한다.


3. let, const 키워드

- 작성법 유의점

let four = 4, let five = 5; // 콤마로 구분해 let 변수 선언시 변수마다 let 사용할 경우 syntax에러가 발생한다.
let six = 6, var seven = 7; // 콤마로 구분해 변수선언시 let과 var 키워드는 동시에 사용 불가능하다. //(Syntax Error 발생)

* let 과 this 키워드

- 예시)

var music = "음악"; console.log(this.music); // 음악이 출력된다.
let sports = "축구"; console.log(this.sports); //undefined

* const 키워드

- const 키워드는 변수에 할댕된 값을 변경할 수 없다. const 변수에 할당된 값은 상수가 된다.

- 자바스크립트는 관례적으로 상수의 변수 이름을 대문자로 표기한다. 하지만 const 키워드로 상수를 구분할 수 있으므로, 대문자를 사용하지 않아도 된다. 관례에 따라 대문자로 사용해도 되지만 const로 구분할 수 있다.

예시)

const SPORTS = "축구";
try{
SPORTS = "야구";
}.catch (error) {
console.log("const 재할당 불가");
} //실행 결과: const 재할당 불가

4. 블록 스코프

- let 변수를 선언하는 가장 큰 목적은 스코프이다.

- 블록스코프의 기준은 if(a==1){ 코드 } 형태에서 블록을 나타내는 중괄호이다.{}

- 블록 { } 안과 밖의 변수 이름이 같더라도 스코프가 다르므로 변수가 선언되고 각 변수에 할당된 값이 대체되지 않고 유지된다.


5. 호이스팅

- js는 소스코드를 위에서 아래로 순차적으로 실행한다. 따라서 호출될 함수를 작성한 후, 아래에서 함수를 호출해야 함수가 호출된다. 그러나 함수 선언문은 함수를 호출하는 코드를 위에 작성하고 호출될 함수를 아래에 작성해도 함수가 호출된다. 이를 함수 호이스팅(hoisting)이라고 한다.

- 여기서 var키워드와 let키워드의 차이가 나오는데, var과 달리 let 변수는 호이스팅이 되지 않는다.

즉,

console.log(sports);
var sports = "스포츠"; //undefined
console.log(music);
let music = "음악"; // 에러 발생(출력 안됨)

이와 같은 상황이 발생하는 것이다.

관련글 더보기

댓글 영역