본문 바로가기

ECMAScript 2015, ECMAScript 6th Edition

1. let, const

let

기존의 es5 에서 scope 은 function 단위였다.

아래의 예제를 보자

if(true) {
	var test = 1;
}
console.log(test);
JS Bin on jsbin.com


test 변수값이 block {} 안에 쓰여졌음에도 불구하고 console 에 정확히 찍힌다!

기존의 java, C#, 등등의 언어에 익숙한 사람이라면 ( block scope 을 사용하는 언어에 익숙한 사람이라면 )

지금 이 상황이 당황스러울 수 있다 +_+ 나도 첨엔 그랬으니;;;


ex. 가장 당황스러웠던 상황

아래를 보면 결과가 1,2,3, 이 찍힐거라 예상되지만

실제로는 그렇지 않다.

왜냐면 var i 는 function 안에 scope 이기 때문에 for 문이 3번 돌면 3이 되어 있고

setTimeout 이 실행 되는 시점에는 i 가 이미 3이 되어 있기 때문에 3만 3번이 찍히는 것이다.


for( var i = 0; i < 3; i++) {
	setTimeout(function() {
		console.log(i);
	}, 100);
}
JS Bin on jsbin.com




여튼 이로 인한 장점도 있지만 그만큼 사용하기 불편한 것도 많이 있었으니..

그래서 나온것이 block scoped variable 바로 let 이다.


위 코드를 우리가 원하던 방식으로 전개해 보자


for( let i = 0; i < 3; i++) {
	setTimeout(function() {
		console.log(i);
	}, 100);
}


JS Bin on jsbin.com





const

변환 할 수 없는 상수값을 지정할때 쓴다.
기존에 ES5 에서는 규칙상 대문자로 지정한 변수는 바꾸지 말자! 라는 암묵적인 규칙을 가지고 있었으나 실제로 그 변수를 수정하면 수정 됐었다.


var SAMPLE_CONST = 3;
console.log(SAMPLE_CONST);
SAMPLE_CONST = 2; 
// 바꾸지 말라고 이렇게 정한건데 꼭 바꾸는 사람들이 있음 ㅜㅠ
console.log(SAMPLE_CONST);
JS Bin on jsbin.com



그래서 등장한 것이 const !!


const SAMPLE_CONST = 3;
console.log(SAMPLE_CONST);
SAMPLE_CONST = 2; 
// 바꾸지 말라고 이렇게 정한건데 꼭 바꾸는 사람들이 있음 ㅜㅠ
console.log(SAMPLE_CONST);
JS Bin on jsbin.com







'ECMAScript 2015, ECMAScript 6th Edition' 카테고리의 다른 글

6. Array-like  (0) 2016.09.07
5. rest  (0) 2016.09.07
4. spread  (0) 2016.09.06
3. iterable protocol  (0) 2016.09.04
2. arrow  (0) 2016.09.04